如何测试 TLS 版本不容忍?

如何测试 TLS 版本不容忍?

更新到 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 -hman 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、不共享任何共同的密码等而失败。

用于调试一般 SSL/TLS 问题密码扫描很好,但不能尚未进行不耐受测试。另一个有用的工具是SSL扫描

相关内容