OpenSSL服务器数据包分为每个数据包270个字节

问题描述 投票:0回答:1

问题我试图通过使用Wireshark捕获DTLS 1.2握手(通过IPv6)与OpenSSL s_servers_client进行分析。握手可以按预期进行,但是无论出于何种原因,服务器数据包都会分成非常小的大小(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_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

该项目需要通过IPv6的DTLS会话,没有任何票证。密码套件必须为ECDHE-ECDSA-AES128-CCM8,并且客户端需要由服务器验证。为了排除源自网络的任何错误,我将回送地址分配给了服务器。回送接口的MTU为65536,不应成为罪魁祸首。

失败尝试我尝试在服务器和客户端上将标志max_send_fragsplit_send_fragsread_buf设置为9000,但这也没有改变。但是,使用TLS 1.2可以在不分割服务器证书的情况下工作。不幸的是,我们的项目需要D TLS。

openssl handshake dtls zephyr-rtos
1个回答
0
投票

这是由于s_server无法查询基础MTU引起的。原因是,默认情况下,s_server不会将基础套接字“连接”到客户端,因此任何查询MTU的尝试都会失败。

此问题的答案是对s_server使用“ -listen”选项。这会导致s_server在发生初始ClientHello之后暂停握手,发现客户端的IP地址,并“连接”基础套接字。然后,MTU查询成功,您看不到碎片。此选项应该是默认选项。

© www.soinside.com 2019 - 2024. All rights reserved.