检查主机所需的TLS版本的命令提示符

65

有没有一种命令可以检查主机网站所需的TLS版本?目前,我唯一知道的检查方法是调整浏览器的最大TLS版本,并检查是否仍然能够访问该站点。但我怀疑是否有更高级的方法。


1
ssllabs上进行测试。 - user207421
1
不是命令行,但是当你进入“锁形图->更多信息->安全”时,Firefox可以告诉你加密级别的技术细节。(我不知道是否需要允许特定的TLS版本才能告诉你它是什么。) - mwfearnley
5个回答

117

您可以使用以下命令进行检查。

对于TLS 1.2:


openssl s_client -connect www.google.com:443 -tls1_2

TLS 1.1:

openssl s_client -connect www.google.com:443 -tls1_1

对于TLS 1:

openssl s_client -connect www.google.com:443 -tls1

如果您获取了证书链和握手,则支持TLS版本。如果您没有看到证书链,并出现类似于“握手错误”的内容,则不支持。


1
我们如何在Windows服务器上进行检查? - Darshana Patel
1
@DarshanaPatel 你可以使用该命令连接到任何服务器,或者如果你想使用该命令,你可以安装Windows版的OpenSSL。 - golimar
我对此有着不同的结果。使用此方法测试的API在1.1版本下没有报告证书,但在1.2版本下却有。这暗示着1.1版本不被支持。然而,使用下面的curl命令,使用1.1版本下载了网站内容/着陆页。不确定为什么openssl的结果与curl不匹配。另外,curl与提供类似检查的在线工具一致。 - Niall
1
对于TLS 1.3,请在末尾使用“-tls3”。 - Shayan
1
@Shayan -tls1_3 - undefined

56

来源于https://maxchadwick.xyz/blog/checking-ssl-tls-version-support-of-remote-host-from-command-line

nmap ssl-enum-ciphers

检查 SSL / TLS 版本支持的另一个选择是 nmap。nmap 通常不会默认安装,因此您需要手动安装它。安装后,您可以使用以下命令来检查 SSL / TLS 版本支持...

nmap --script ssl-enum-ciphers -p 443 www.google.com

nmap的ssl-enum-ciphers脚本不仅能够一次性检查所有版本(TLS 1.0、TLS 1.1和TLS 1.2)的SSL / TLS版本支持,还能为每个版本检查密码支持,并提供评分。


3
这比使用openssl猜测和检查要好得多。 - Sinjai
3
这份文件本身不错,但这个脚本不支持TLS 1.3。 - Mikko Rantalainen
5
似乎他们最近为1.3版本添加了支持:https://github.com/nmap/nmap/issues/1348 - golimar
很棒的回答,而且比被接受的那个更好。 - ericdain

6

我喜欢使用curl,它可以很好地报告TLS版本协商的情况。

例如,以下命令尝试使用TLS 1.1连接,服务器会升级到1.2:

$ curl -Iiv --tlsv1.1 https://example.com
*   Trying 192.168.205.11:443...
* TCP_NODELAY set
* Connected to example.com (192.168.205.11) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
[...]

如果要禁止服务器升级TLS版本,请使用--tls-max选项:

$ curl -Iiv --tlsv1.1 --tls-max 1.1 https://example.com
*   Trying 192.168.205.11:443...
* TCP_NODELAY set
* Connected to example.com (192.168.205.11) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS alert, internal error (592):
* error:141E70BF:SSL routines:tls_construct_client_hello:no protocols available
* Closing connection 0
curl: (35) error:141E70BF:SSL routines:tls_construct_client_hello:no protocols available

在此情况下,连接失败是因为客户端未提供任何高于1.1的TLS版本,但服务器不接受1.2以下的版本。如果以这种方式使用,则输出与openssl_client输出非常相似。

0

0
testssl.sh(下载网站)生成类似于SSLLabs的报告,报告包含有关支持的TLS版本的信息。为了加快速度,您可以使用-p--protocols)标志仅测试支持的TLS版本。
我发现testssl.sh(以及通常的本地命令行工具)在测试服务器在“上线”之前非常有用的一个特定情况是。SSLLabs在线测试需要主机名,将其解析为IP地址,并测试每个IP地址。这要求我的服务器已经有DNS条目。使用testssl.sh,我可以通过其IP地址测试单个服务器。
./testssl.sh -p --ip 123.123.123.123 https://example.com

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接