使用 Curl 恢复 TLS 1.3 会话 - 其他所有请求都使用完整握手

使用 Curl 恢复 TLS 1.3 会话 - 其他所有请求都使用完整握手

我正在尝试测试我们的嵌入式设备和云服务器 (NGINX) 之间的 TLS 1.3 会话恢复。我们的嵌入式设备使用 libcurl,并且表现出一些奇怪的行为,即只有每隔一个请求才会发送 PSK 并使用简化的 TLS 握手重新连接。我也能够在命令行上重新创建此操作:

curl -X GET --tlsv1.3 -H "Connection: close" --cacert <our_ca_bundle> <url> <url> <url> <url> <url> <url>

Connection: close必要在请求之间强制握手。URL 都是相同的,并且每个其他 https 请求都会导致缩短的握手。

我们使用 libcurl 对来自 c++ 应用程序的请求获得了相同的行为。

如果我使用 OpenSSL s_client 进行测试,它会在第一次使用简化握手之后按预期处理所有请求。

echo -en "GET /ping HTTP/1.1\r\nHost: <HOST>\r\nConnection: close\r\n\r\n" | openssl s_client -connect <HOST>:443 -sess_out session -tls1_3 -quiet

echo -en "GET /ping HTTP/1.1\r\nHost: <HOST>\r\nConnection: close\r\n\r\n" | openssl s_client -connect <HOST>:443 -sess_in session -tls1_3

echo -en "GET /ping HTTP/1.1\r\nHost: <HOST>\r\nConnection: close\r\n\r\n" | openssl s_client -connect <HOST>:443 -sess_in session -tls1_3

...and so on

当我尝试相同的 curl 请求时,https://google.com在第一次恢复 TLS 连接后,每个请求均按预期工作。

有人知道为什么 curl 请求会如此表现吗?

相关内容