OpenSSL服务器数据包被分割成每个数据包270字节

OpenSSL服务器数据包被分割成每个数据包270字节,openssl,handshake,dtls,zephyr-rtos,Openssl,Handshake,Dtls,Zephyr Rtos,问题 我正试图通过Wireshark捕获DTLS 1.2握手(通过IPv6)来分析OpenSSLs_服务器和s_客户端。握手按预期工作,但服务器数据包由于任何原因被分割成非常小的大小(270字节) 这是数据包大小在括号中的握手流程: Client | Server ==============================================================================

问题
我正试图通过Wireshark捕获DTLS 1.2握手(通过IPv6)来分析OpenSSL
s_服务器
s_客户端
。握手按预期工作,但服务器数据包由于任何原因被分割成非常小的大小(270字节)

这是数据包大小在括号中的握手流程:

Client                                        | Server
=========================================================================================
Client Hello (233)                            |
                                              | Hello Verify Request (110)
Client Hello (253)                            |
                                              | Server Hello, Certificate (Fragment) (270)
                                              |
                                              | Certificate (Fragment) (270)
                                              | Certificate (Fragment) (270)
                                              | Certificate (Fragment) (270)
                                              | Certificate (Fragment) (270)
                                              | Certificate (Fragment) (270)
                                              | Certificate (Fragment) (270)
                                              | Certificate (Fragment) (270)
                                              | Certificate (Fragment) (270)
                                              |
                                              | Certificate (Reassembled),
                                              | Server Key Exchange (Fragment) (270)
                                              | 
                                              | Server Key Exchange (Reassembled),
                                              | Certificate Request (Fragment) (270)
                                              |
                                              | Certificate Request (Reassembled),
                                              | Server Hello Done (235)
Certificate, Client Key Exchange,             |
Certificate Verify, Change Cipher Spec (1764) |
                                              | Change Cipher Spec,
                                              | Encrypted Handshake Message (129)
                                              :
                                              :
服务器似乎不会发送任何超过270字节的数据包。然而,可以清楚地看到,客户机没有这样的限制,而是在一个数据包中发送客户机证书

如何复制行为
打开终端(Ubuntu 18.04)并使用以下命令启动服务器:

openssl s_server -dtls1_2 -6 -no_ticket -cipher ECDHE-ECDSA-AES128-CCM8 -key <server_private_key>.key.pem -cert <server_certificate>.cert.pem -CAfile <ca_certificate>.cert.pem -Verify 5 -verify_return_error -accept [::1]:4444 -debug
openssl s_服务器-dtls1_2-6-无票据-密码ECDHE-ECDSA-AES128-CCM8-密钥.key.pem-证书.cert.pem-证书.cert.pem-验证5-验证返回错误-接受[::1]:4444-调试
打开另一个终端并启动客户端:

openssl s_client -dtls1_2 -6 -cipher ECDHE-ECDSA-AES128-CCM8 -cert <client_certificate>.cert.pem -key <client_private_key>.key.pem -CAfile <ca_certificate>.cert.pem -verify 5 -verify_return_error -connect [::1]:4444
openssl s_客户端-dtls1_2-6-密码ECDHE-ECDSA-AES128-CCM8-证书cert.pem-密钥key.pem-文件cert.pem-验证5-验证返回错误-连接[::1]:4444
该项目需要通过IPv6进行DTLS会话,而不需要任何票证。密码套件需要是ECDHE-ECDSA-AES128-CCM8,客户端需要由服务器验证。
为了排除源自网络的任何错误,我将环回地址分配给服务器。环回接口的MTU为65536,不应成为罪魁祸首

尝试失败

我尝试在服务器和客户端上将标志
max\u send\u frag
split\u send\u frags
read\u buf
设置为9000,但这也没有改变任何事情。但是,使用TLS 1.2时,这可以在不破坏服务器证书的情况下工作。不幸的是,我们的项目需要TLS。

这是由于s_服务器查询底层MTU失败造成的。原因是,默认情况下,s_服务器不会将底层套接字“连接”到客户端,因此任何查询MTU的尝试都会失败


这个问题的答案是对s_服务器使用“-listen”选项。这会导致s_服务器在初始ClientHello发生后暂停握手,发现客户端的IP地址,并“连接”底层套接字。然后,MTU查询成功,您不会看到碎片。此选项可能是默认选项。

您使用的openssl版本是什么?版本:openssl 1.1.1 2018年9月11日非常感谢您的快速响应!这修复了它,我终于可以开始使用s_服务器调试我自己的TLS客户端。是的,我也希望这是默认值。