客户端发送“ Client 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条目:
连接器端口=“ 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
服务器发送“服务器问候”,选择“ TLS_RSA_WITH_AES_128_CBC_SHA 0x002f)”,并且在大约1.5毫秒后服务器发送了致命警报(握手失败(40))。
我们能否解释握手失败?这是由于客户端密码列表中未包含TLS_RSA_WITH_AES_128_CBC_SHA吗?
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版本,由于(严重)安全漏洞,它们已全部淘汰。