TLS版本扫描nmap,openssl,ssllab之间的差异

我试图扫描一个端点,看看它正在运行的TLS版本,我看到nmap扫描和openssl扫描之间的一些差异。 扫描同一个主机我只能从nmap(7.40)看到TLSv1.0,而且我可以看到TLSv1.2和openssl(1.0.1e)。 我也使用Qualys SSL Labs扫描相同的主机,它似乎也得到了TLSv1.2。 所以我想知道为什么nmap只显示TLSv1.0? (扫描结果如下)

nmap扫描:

localhost:~ localuser$ nmap -sV --script ssl-enum-ciphers -p 443 example.com Starting Nmap 7.40 ( https://nmap.org ) at 2017-02-11 13:13 PST Nmap scan report for example.com (###.###.###.###) Host is up (0.016s latency). PORT STATE SERVICE VERSION 443/tcp open ssl/http Apache Tomcat/Coyote JSP engine 1.1 |_http-server-header: Apache-Coyote/1.1 | ssl-enum-ciphers: | TLSv1.0: | ciphers: | TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (secp192r1) - D | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp192r1) - A | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp192r1) - A | TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C | TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A | TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A | compressors: | NULL | cipher preference: client | warnings: | 64-bit block cipher 3DES vulnerable to SWEET32 attack | Key exchange (secp192r1) of lower strength than certificate key |_ least strength: D Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 24.51 seconds localhost:~ localuser$ 

openssl扫描

 SSL handshake has read 8589 bytes and written 453 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES256-GCM-SHA384 Session-ID: 589F81CE166178A7DA49EC4EF9F86412FA161E6B4C54CB65E7111784B48A2054 Session-ID-ctx: Master-Key: 94179213B34A8DCA54A4AD23661E2C8EBF3E46BC0E251426DC377FD27513584B9C978357CAE0663AF77B488AC6158887 Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None Start Time: 1486848462 Timeout : 300 (sec) Verify return code: 0 (ok) --- 

ssl-enum-ciphers nmap脚本只是告诉你一个服务器支持的密码套件 。 它不会告诉您服务器支持的最大SSL / TLS版本。 每个密码套件都是为一组SSL / TLS版本定义的。 nmap告诉你列出的6个密码套件是从版本TLSv1.0向上定义的(包括TLSv1.1和TLSv1.2)。

这是一个在ssl-enum-ciphers 。 处理TLS的所有不同的实现可能是相当困难的,在这种情况下,脚本将带有不匹配的TLS版本的警报消息解释为拒绝脚本尝试的TLS版本。 我通过互联网上的另一个系统证实,这种行为实际上并不是拒绝协议版本,而是拒绝提供的密码套件。 为了使事情更加复杂,如果在一个版本(TLS 1.1)中支持密码而在另一个版本(TLS 1.2)中不支持密码,则该服务器将只是将版本切换到支持该密码的版本,即使该协议版本不是由客户端!

我对脚本进行了一些修改,以处理这些奇怪的边缘情况。 扫描此服务器所花的时间比符合RFC要求的更长,但现在确实可行。 您可以通过上面链接的NSEdoc页面上的下载链接获取更新后的脚本,它将包含在下一个Nmap版本中。