ssl - 为什么 DTLSv1_listen() 返回零?

标签 ssl openssl dtls

我正在使用示例代码“dtls_udp_echo.c”学习 DTLS...

服务器:“DTLSv1_listen(ssl, &client_addr)”

底层套接字是非阻塞的,但会在可读性时唤醒。

只要客户端执行 SSL_connect(),服务器就会被调用。所以我相信 hello 是由服务器发送和接收的。但是 DTLSv1_listen() 总是返回零,而 client_addr 也全为零。我只是不明白可能出了什么问题。

我采纳相关帖子的建议添加SSL_state_string_long()。它在 DTLSv1_listen() 返回 0 后打印“SSL state before/accept initialization”。

谢谢你的帮助。

最佳答案

也许您启用了 cookie 交换?我不确定它是否在较新的 openssl 版本中默认启用。为了防止服务器受到 dos 攻击,hello 消息有不同的行为。客户端发送一个问候,服务器用一个 helloVerifyRequest 回答。客户端发送带有附加 cookie 的问候。服务器验证此 cookie,当它有效时,正常的握手例程将继续。发送此 HelloVerifyRequest 后,DTLSv1_listen 返回 0。可能那是你的问题。我找到了一个近乎完美的关于客户端服务器与 dtls 通信的文档。这是 link .

关于ssl - 为什么 DTLSv1_listen() 返回零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15261584/

相关文章:

apache - 使用 https (SSL) 的网站无法在 IE 和 Safari 中打开

ssl - Netsuite https模块添加自签名证书访问第三方Web Service

c# - 如何使用 Ssl Stream 获取/存储客户端证书?

ssl - s_client 验证证书失败,但浏览器接受

encryption - 我可以在 DTLS-SRTP 加密中指定自己的加密 key 吗

openssl - DTLS (OpenSSL) 中的 session ID

ssl - JConsole SSL 和私钥

cryptography - OpenSSL GCM 解密中的后期身份验证

c++ - SSL_read 失败并显示 SSL_ERROR_SSL