客户端使用密码套件中包含的密码发送“客户端Hello”消息。
Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA (0x002f)
Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA (0x0035)
Cipher Suite: TLS_RSA_WITH_RC4_128_SHA (0x0005)
Cipher Suite: TLS_RSA_WITH_3DES_EDE_CBC_SHA (0x000a)
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)
Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009)
Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a)
Cipher Suite: TLS_DHE_DSS_WITH_AES_128_CBC_SHA (0x0032)
Cipher Suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA (0x0038)
Cipher Suite: TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA (0x0013)
Cipher Suite: TLS_RSA_WITH_RC4_128_MD5 (0x0004)
在server.xml中,不会出现这些密码。这是catalina条目:
Connector port =“4443”SSLEnabled =“true”acceptCount =“20000”maxThreads =“5000”allowTrace =“false”scheme =“https”secure =“true”clientAuth =“false”sslProtocol =“TLS”keystoreFile =“/ usr / local / tomcat6 / conf / Default-Cert.p12”keystoreType =“PKCS12”keystorePass =“uuuuuu”ciphers =“...”
,密码为SSL_RSA_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_AES_256_CBC_SHA, SSL_DHE_RSA_WITH_AES_128_CBC_SHA, SSL_DHE_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA
服务器发送“服务器Hello”选择“TLS_RSA_WITH_AES_128_CBC_SHA 0x002f”“并且在~1.5毫秒后服务器发送致命警报(握手失败(40))。
我们可以解释握手失败吗?这是因为TLS_RSA_WITH_AES_128_CBC_SHA未包含在客户端密码列表中吗?
答案 0 :(得分:0)
SSL fatal error, handshake failure 40
表示安全连接未能建立,因为客户端和服务器无法就连接设置达成共识。通常是因为客户端或服务器太旧了,所以仅支持删除的协议/密码。
按照历史顺序,协议为SSLv2,SSLv3,TLS 1.0,TLS 1.2,TLS 1.3。
根据您提供的调试信息和密码名称:
在这种特定情况下,服务器运行在废弃的SSL上,非常需要升级。看起来像Java 6上的tomcat 6,在当时(2015年)已经过时了。
如果您要在2020年或以后阅读本文。 https可以使用的Java的最低最低版本是Java 8(完全支持TLS 1.2)。
尝试curl --tlsv1.2 https://example.org
来测试Web服务器支持哪个版本的TLS,curl --help
来查找curl支持的版本。请注意,截至2020年,仅TLS 1.2得到广泛支持,而TLS 1.3则逐渐得到支持。可能难以获得可以使用较旧的SSL / TLS变体进行测试的curl / openssl版本,由于(严重)安全漏洞,它们已全部淘汰。