更新到 Mozilla Firefox 38 后,我们可以在一些 HTTPS 网站上看到“安全连接失败”消息。
如果我们使用“security.tls.insecure_fallback_hosts”将网站放在排除列表中 - 那么我们可以看到它可以通过 TLSv1.2 连接(使用https://addons.mozilla.org/en-us/firefox/addon/calomel-ssl-validation/)
我们怀疑服务器的问题是由于 TLS 版本不兼容造成的。
问题:是否有任何脚本、解决方案可以在给定端口上测试给定网络服务器是否具有 TLS 版本不耐受性?这些服务器不在互联网上公开。
答案1
您可以使用 OpenSSL 命令行工具进行测试,例如作为起点:
$ openssl s_client -connect example.com:443 -verify 1 -tls1_2
在哪里:
-tls1_2 - 仅使用 TLSv1.2
帮助(openssl s_client -h
或man s_client
)描述了许多其他选项 - 例如,您可以指定密码列表 - 也是限制性/现代客户端/服务器可能显式设置的内容,因此可能会产生失败的连接 - 特别是当连接到旧服务器/客户端时或从旧服务器/客户端连接时。
显示不同结果的示例:
$ echo | openssl s_client -verify 1 -connect www.cebitec.uni-bielefeld.de:443
[..]
verify return:1
[..]
SSL-Session:
Protocol : TLSv1
Cipher : AES128-SHA
Session-ID: [non-empty]
[..]
---
DONE
$ echo $?
0
这是没有强制执行最低版本的情况,现在有 TLS 1.2 要求:
$ echo \
| openssl s_client -verify 1 -tls1_2 -connect www.cebitec.uni-bielefeld.de:443
[..]
[..]:SSL routines:SSL3_GET_RECORD:wrong version number:s3_pkt.c:347:
--
no peer certificate available
[..]
SSL-Session:
Protocol : TLSv1.2
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
[..]
---
$ echo $?
1
意味着服务器不支持 TLS 1.2。
可能是因为它使用了相当旧版本的 openssl。
答案2
如果该网站位于互联网上,https://www.ssllabs.com/ssltest/是调试这些问题的一个很好的工具。
maxschlepzig 的答案将专门测试不容忍性,但我看到过由于多种不同原因而失败的情况,包括最近较弱的 Diffie-Hellman 密钥,您的发行版可能已升级 NSS 或 OpenSSL,因此它将拒绝 <= 768 位密钥。在过去,我见过一些东西因为一个大的 ClientHello、不共享任何共同的密码等而失败。