我正在尝试扫描一个端点以查看它正在运行的 TLS 版本,我发现 nmap 扫描和 openssl 扫描之间存在一些差异。扫描同一台主机时,我只看到 nmap (7.40) 中的 TLSv1.0,而我可以看到 openssl (1.0.1e) 中的 TLSv1.2。我还使用 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)
---
答案1
nmapssl-enum-ciphers
脚本是仅有的告诉你关于密码套件服务器支持的。它确实不是告诉您服务器支持的最高 SSL/TLS 版本。每个密码套件都针对一组 SSL/TLS 版本进行定义。nmap 告诉您列出的 6 个密码套件是从 TLSv1.0 版本开始定义的(包括 TLSv1.1 和 TLSv1.2)。
答案2
这是ssl-enum-ciphers
。处理所有不同的 TLS 实现可能非常困难,在这种情况下,脚本将带有不匹配 TLS 版本的警告消息解释为拒绝脚本尝试的 TLS 版本。我与互联网上的另一个系统确认,这种行为实际上不是拒绝协议版本,而是拒绝提供的密码套件。为了让事情变得更复杂,如果一个密码在一个版本(TLS 1.1)中受支持,但在另一个版本(TLS 1.2)中不受支持,则此服务器将切换到支持该密码的版本,即使客户端不提供该协议版本!
我对脚本做了一些修改,以便处理这些奇怪的边缘情况。扫描此服务器比更符合 RFC 的服务器花费的时间更长,但现在它可以正常工作了。您可以通过我上面链接的 NSEdoc 页面上的下载链接获取更新的脚本,它将包含在下一个 Nmap 版本中。