我一直在尝试使用OpenSSL编写DTLS服务器/客户端,但是遇到了DTLSv1_listen
失败的问题,因为ClientHello
消息是零碎的(我读到这是因为DTLSv1_listen
必须保持无状态才能防止DDoS攻击) )。
如何避免ClientHello
碎片化?
注意:破碎的ClientHello
似乎仅在Mac上发生。当我在ubuntu上运行我的代码时,它可以正常工作,但是由于ClientHello
零散,我的Mac构建崩溃了。
更新:事实证明,除了零散的ClientHello
之外,由于某种原因,poll
的超时为0ms。解决该问题后,我再次尝试。
在客户端,有一个
error:14102410:SSL routines:dtls1_read_bytes:sslv3 alert handshake failure
在服务器端(碎片化的客户端问候仍然存在):error:1415E191:SSL routines:DTLSv1_listen:fragmented client hello
error:14209134:SSL routines:tls_early_post_process_client_hello:cookie mismatch
我是Wireshark的新手,但我进行了此捕获(希望有帮助):https://drive.google.com/file/d/1mieHlZa8zG7Yvd8M615X6AIpdOet8uXv/view?usp=sharing 最佳答案
在许多情况下,openssl附带了许多密码套件和其他算法,这些密码套件和其他算法都放在HELLO_CLIENT中。如果这对于您的消息大小来说太大了,请尝试将openssl配置为使用密码套件的子集(也许您知道服务器所支持的密码)。在许多情况下,这有助于将CLIENT_HELLO放入一条消息中。