如何将“仅 SSLv3” Web 客户端连接到仅接受 TLS1.0 - TLS1.2 的 Web 服务器

如何将“仅 SSLv3” Web 客户端连接到仅接受 TLS1.0 - TLS1.2 的 Web 服务器

我有一个支持 SSLv3、TLS1.0、TLS1.1 和 TLS1.2 的旧式嵌入式 HTTP 客户端(非常旧)。出于安全原因,我想删除 SSLv3。

我重建了 openssl 库,并想验证此 Web 客户端在安全 HTTP 连接期间是否不使用 SSLv3。此客户端还被编程为连接到互联网上的特定 Web 服务器,该服务器已经不支持 SSLv3。

我尝试通过在嵌入式 Web 客户端和 Internet Web 服务器之间使用代理来验证它是否有效。

设置:
Webclient <----> Squid 代理 <----> Https://www.loremipsum.com/xxx/xxx

环境:
网络客户端
    -仅限 SSLv3
Squid 代理:
    - 安装在 Windows Server 2012 中
- 客户端 TLS 版本 --> TLS1.0、TLS1.1、TLS1.2 已启用
- 服务器 TLS 版本 --> 仅 SSLv3
外部 Web 服务器: -仅支持 TLS1.0、TLS1.1 和 TLS1.2 预期成绩: 删除 SSLv3 之前:HTTPS 连接中使用 SSLv3 删除 SSLv3 后:Webclient 无法连接,数据包中出现握手失败代码 实际结果: 删除 SSLv3 之前:使用 **TLS1.0** 代替 SSLv3(这部分是我的问题) 删除 SSLv3 后:HTTPS 连接中使用 TLS1.0

这里有谁知道为什么在实际测试中使用 TLS1.0 而不是 SSLv3?或者你能推荐我可以用来确认这一变化的工具吗?

非常感谢。

答案1

至于为什么在测试中使用 tls:客户端将检查其可用的密码,并首先尝试最强的密码。因此,它始终会优先选择 tls 而不是 ssl3。

如果网站在互联网上可见,您可以使用以下测试服务之一https://testtls.com验证哪个协议被启用/禁用。

如果(我猜测)该服务仅在内部可用,您可以使用 curl 并指定协议:

 curl -vvv --sslv3 https://www.myhost.tld

您可以更详细地指定每个密码:https://curl.se/docs/ssl-ciphers.html

另一种方法是直接使用 openssl:(https://www.misterpki.com/openssl-s-client/

 openssl s_client -connect www.host.tdl:443 -ssl3

请注意,在这两种情况下,您都需要 openssl/curl 并且 ssl3 仍然可用(较新的版本根本没有编译 ssl)

您需要在 squid 中进行如下配置(您可能需要根据 openssl 版本调整选项):

https_port ... options=SSLv3:NO_SSLv2:NO_TLS1:NO_TLS1_1:NO_TLS1_3
http_port ... ssl-bump options=NO_SSLv3:NO_SSLv2:NO_TLS1:NO_TLS1_1:NO_TLS1_3

相关内容