由于安全扫描,我被告知不要使用TLS1.0。我找到了链接,它为我提供了用于检查是否使用/启用特定协议的命令。我运行的命令(输出是)
( TLS1.0已禁用输出)
$ openssl s_client -connect localhost:8443 -tls1
CONNECTED(00000003)
139874418423624:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1275:SSL alert number 40
139874418423624:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:598:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
Start Time: 1505770082
Timeout : 7200 (sec)
Verify return code: 0 (ok)
---链接说,如果协议启用,它会说“连接”,否则“握手失败”。但是,正如您可以看到上面的消息一样,它说,尽管我将Tomcat配置为使用TLS1.2,但两者都是如此。
我在server.xml文件中的配置:
<Connector port="8443" protocol="HTTP/1.1"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="/glide/bigdata/bdapi/keys/bdapi_keystore.jks"
keystorePass="bdapi123" clientAuth="false" sslProtocol="TLSv1.2"
sslEnabledProtocols="TLSv1.2"/>如果我允许Tomcat使用TLS1.0,我仍然可以看到CONNECTED,但我也看到了证书信息。
(启用TLS1.0的输出)
openssl s_client -connect localhost:8443 -tls1
CONNECTED(00000003)
<snip snip>
<snip snip>
(certificate info)
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
<snip snip>
<snip snip>
(certificate info)
---
Server certificate
-----BEGIN CERTIFICATE-----
<snip snip>
<snip snip>
(public key)
-----END CERTIFICATE-----
<snip snip>
<snip snip>
(certificate info)
---
No client certificate CA names sent
Server Temp Key: ECDH, secp521r1, 521 bits
---
SSL handshake has read 2121 bytes and written 357 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : ECDHE-RSA-AES256-SHA
Session-ID: 59C0448146B0A18DE52D99C630C896E12BA9861702AB2582C2AA0658E6458B04
Session-ID-ctx:
Master-Key: <some random key>
Key-Arg : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
Start Time: 1505772673
Timeout : 7200 (sec)
Verify return code: 21 (unable to verify the first certificate)
---
read:errno=0如何解释openssl的输出?我是成功地禁用了上面配置的TLS1.0,还是因为它在两个输出中都是“连接”的,所以我没有禁用它,我会再次失败安全扫描吗?
发布于 2017-09-19 05:19:16
TL;TR:从客户端验证服务器不支持TLS1.0绝非易事。如果成功地连接到TLS 1.0,则可以确保服务器支持TLS 1.0。但是,如果此尝试失败,则无法确保服务器不支持TLS1.0。
正如你已经意识到的,在你引用的链接中提供的信息至少部分错误。而且,它们是不完整的。检查服务器是否真的禁用了TLS 1.0并不是那么简单。要了解需要检查什么才能真正确定,最好至少对TLS-握手的工作原理有一个基本的理解。请注意,我在这里说的大部分内容也适用于SSL,它主要是当前称为TLS的同一个协议家族的早期名称。
最初,客户端需要创建到服务器的TCP连接。这和TLS本身没有任何关系。如果TCP连接成功,您将得到CONNECTED(00000003)。如果您没有连接到这个服务器,那么服务器可能会关闭,或者无法从您的站点访问,例如,因为防火墙阻塞了访问权限。因此,没有连接就不能说明服务器支持TLS1.0的能力。
在创建TCP连接之后,TLS部件开始。在最简单的情况下,客户端在ClientHello消息内部的TLS握手开始时发送它所能提供的最佳TLS版本和它支持的密码。服务器以它支持的最佳SSL/TLS协议进行应答,该协议与客户端提供的协议版本相同或更低。服务器根据客户端提供的内容和配置为服务器可接受的内容来选择通用密码。在您的特定情况下,客户端提供TLS1.0作为最佳协议(由于-tls1选项)和默认密码集。如果服务器不支持TLS 1.0或更低版本,如果服务器不支持客户端提供的任何密码,握手将失败。由于最后一部分的原因,即使服务器启用了TLS1.0,服务器也有可能在特定客户端出现故障,因为服务器不喜欢客户机提供的密码。
变得更复杂了。服务器现在通常支持同一IP地址上的多个证书。这是通过在TLS握手开始时使用扩展在ClientHello中包含目标主机名来实现的。如果没有SNI扩展,或者扩展与任何配置的主机名不匹配,服务器通常要么发送一些默认证书,要么中止握手。由于最后一部分的原因,即使服务器启用了TLS1.0,服务器也有可能在特定的客户机上失败,因为没有使用SNI扩展,或者使用了错误的主机名。默认情况下,openssl s_client不会使用SNI,所以您的尝试可能仅仅因为缺少SNI扩展而失败。为此,您必须使用-servername选项,当然,您还需要使用在服务器上正确配置的主机名。
到目前为止,我们只处理正常的TLS堆栈和与服务器的直接连接。如果TLS堆栈被破坏,或者中间有一些损坏的中间框(如负载平衡器、防火墙等),即使服务器支持TLS 1.0,它们也可能使握手意外或故意失败。如果服务器前面有一些SSL终端(一些防火墙、负载平衡器或CDN),那么您甚至不会测试服务器的属性,而是前面系统的属性。
换句话说:如果您成功地获得到服务器的TLS 1.0连接,您可以确保服务器或它前面的SSL终止程序支持TLS 1.0。如果TLS1.0连接失败,这并不意味着服务器不支持TLS1.0。
发布于 2017-09-20 09:37:39
虽然这些工具没有直接回答你的具体问题,但它们可能会提供你想要的结果。如果您有Internet连接,请尝试以下几种:
如果没有Internet连接,请尝试:
发布于 2020-09-16 11:39:50
这个输出意味着我们已经成功地禁用了TLS 1.0:
CONNECTED(00000003)
140089425225616:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:s3_pkt.c:1493:SSL alert number 70
140089425225616:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl handshake failure:s3_pkt.c:659:如果没有禁用,它将显示完整的证书详细信息。
https://security.stackexchange.com/questions/169732
复制相似问题