c++ - 使用 OpenSSL (DTLS) 避免零碎的 ClientHello

标签 c++ openssl dtls

我一直在尝试使用 OpenSSL 编写 DTLS 服务器/客户端,但我遇到了 DTLSv1_listen 的问题。失败,因为 ClientHello消息是零散的(我读过这是因为 DTLSv1_listen 必须保持无状态以防止 DDoS 攻击)。
如何避免碎片化ClientHello年代?
注:零散的ClientHello s 似乎只发生在 mac 上。当我在 ubuntu 上运行我的代码时,它可以正常工作,但我的 mac 构建由于碎片 ClientHello 而崩溃.
更新:事实证明,除了零散的 ClientHello s,poll 的超时时间由于某种原因是0ms。修复后,我再次尝试。
在客户端,有一个

error:14102410:SSL routines:dtls1_read_bytes:sslv3 alert handshake failure
在服务器端(仍然存在碎片化的客户端 hello):
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 放入一条消息中。

关于c++ - 使用 OpenSSL (DTLS) 避免零碎的 ClientHello,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62666114/

相关文章:

c++ - 如何使用遗传算法求解线性方程组?

c++ - 如何让我的 EXE 可以在控制台接受参数?

qt - 如何使用 OpenSSL 验证 JSON Web token ?

security - TURN 上的 WebRTC 流量是否端到端加密?

c++ - 在运行时使用成员函数为 2D vector 成员变量初始化和分配大小

C++ SDL初始化所有内容并出现运行时错误

ssh - 从 PKCS12 文件中提取公钥/私钥以便稍后在 SSH-PK-Authentication 中使用

bash - 映射SSL/TLS密码套件及其等效的OpenSSL

tls1.2 - 对于 DTLS 1.2 实现来说,哪个 API 是最容易使用、维护良好且稳定的 API?