DTLS服务器在第二个客户端后回答不正确ClientHello
我正在使用与UDP不同的网络传输协议构建DTLS服务器和客户端安装程序。但是这个协议也是不可靠的,所以需要DTLS。该协议使用无线电网络将数据从客户端传输到服务器,反之亦然。为了使它与DTLS兼容,接收到的数据然后通过UDP-客户端转发到服务器端的DTLS服务器,并通过UDP服务器转发到客户端的DTLS-客户端,均在本地主机上运行。DTLS服务器在第二个客户端后回答不正确ClientHello
作为基础,我使用mbedTLS的programs/ssl目录中给出的DTLS示例实现。由于所使用的协议在传输的情况下不是紧固件,因此我通过使用mbedtls_ssl_conf_handshake_timeout函数来调整握手超时,以便没有任何可能干扰实际数据传输的早期重传。这是按需要工作的。
大约2分钟后,服务器收到第一个握手消息(ClientHello)。服务器使用VerifyRequest来回答,并且在3分钟后,服务器接收到客户的答案(ClientHello + Cookie)。但不是发送一个ServerHello服务器回答与另一个VerifyRequest,如他忘记了第一个初始化ClientHello。
我将接收到的ClientHello消息与DTLS握手产生的一些消息进行了比较,使用相同的设置但UDP作为网络协议,并且它们几乎相同(除了随机部分和Cookie)。
我是否需要修改另一个超时定时器,以便服务器等待第二个ClientHello的时间更长?或者我还忽略了另一件事情?
如果您需要对问题的任何进一步描述,我会尽力给予他们。
我会感激任何一种想法或提示。
我为延迟回复
道歉你可以从code看到,验证如果cookie验证失败发送请求消息:
if(ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM &&
ssl->handshake->verify_cookie_len != 0)
{
MBEDTLS_SSL_DEBUG_MSG(2, ("client hello was not authenticated"));
MBEDTLS_SSL_DEBUG_MSG(2, ("<= write server hello"));
return(ssl_write_hello_verify_request(ssl));
}
您应该检查f_cookie_check
实施mbedtls_ssl_conf_dtls_cookies()
设置。 根据你的描述,我假设你使用的是默认的cookie检查,所以你应该检查原因,mbedtls_ssl_cookie_check()
问候,
Mbed TLS团队成员
罗恩