SSL致命错误,握手失败40

时间:2014-06-19 14:42:33

标签: tomcat ssl certificate tomcat6

  1. 客户端使用密码套件中包含的密码发送“客户端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)
    
  2. 在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

  3. 服务器发送“服务器Hello”选择“TLS_RSA_WITH_AES_128_CBC_SHA 0x002f”“并且在~1.5毫秒后服务器发送致命警报(握手失败(40))。

    我们可以解释握手失败吗?这是因为TLS_RSA_WITH_AES_128_CBC_SHA未包含在客户端密码列表中吗?

1 个答案:

答案 0 :(得分:0)

SSL fatal error, handshake failure 40表示安全连接未能建立,因为客户端和服务器无法就连接设置达成共识。通常是因为客户端或服务器太旧了,所以仅支持删除的协议/密码。

按照历史顺序,协议为SSLv2,SSLv3,TLS 1.0,TLS 1.2,TLS 1.3。

根据您提供的调试信息和密码名称:

  • 服务器仅执行SSL,不知道哪个版本。自从在提出问题之前(2015年之前),SSL就已过时,由TLS取代。
  • 客户端需要TLS。在2015年可能是TLS 1.0和/或TLS 1.2。

在这种特定情况下,服务器运行在废弃的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版本,由于(严重)安全漏洞,它们已全部淘汰。