OpenSSL:使用他们自己的示例程序来自 www.openssl.org 的意外 EOF

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

在 Windows 10 计算机上,我通过 vcpkg 设置了一个 OpenSSL 3.3 项目,并编译了他们在 https://github.com/openssl/openssl/blob/master/demos/guide/tls- 提供的示例程序-客户端块.c

我尝试使用此程序向 www.openssl.org:443 发出 HTTPS 请求(完整命令行:

tls-client-block www.openssl.org 443
),但连接失败,日志输出:

Failed to connect to the server
2C7C0000:error:0A000126:SSL routines::unexpected eof while reading:ssl\record\rec_layer_s3.c:692:

查阅文档,您可以设置一个选项来缓解此问题,

SSL_OP_IGNORE_UNEXPECTED_EOF
,但设置该选项并不能解决主要问题 - 连接仍然失败,仅一步之遥,以
SSL_ERROR_ZERO_RETURN
结束。

尝试与

wget https://www.openssl.org:443/
连接确实有效;网络浏览器也是如此,这并不奇怪。但我不确定它们是否在后面使用 OpenSSL,因为我不认为它是 Windows 上的系统库。

服务器似乎只是简单地拒绝了官方示例中配置的客户端,而且我对 TLS(尤其是 OpenSSL)还不够了解,无法弄清楚为什么会发生这种情况。我将不胜感激一些指点。

c openssl
1个回答
0
投票
查阅文档,您可以设置一个选项来缓解此问题,SSL_OP_IGNORE_UNEXPECTED_EOF,但设置该选项并不能解决主要问题 - 连接仍然失败,仅一步之后,以 SSL_ERROR_ZERO_RETURN 结束。

演示代码显式检查 SSL_ERROR_ZERO_RETURN。

https://github.com/openssl/openssl/blob/3de3d481b269e9831d0b9abd3598b262647ae050/demos/guide/tls-client-block.c#L246-L259

这表示正常完成(即对等方决定关闭连接)。由于演示使用 HTTP/1.0,这是正常的且符合预期(连接总是在单个请求后关闭)。当我将

SSL_OP_IGNORE_UNEXPECTED_EOF

 选项与 tls-client-block.c 一起使用并连接到 
www.openssl.org 时,它似乎按预期工作。 HTTP 数据被返回并打印到屏幕上,然后连接关闭。

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