Tomcat SSL致命错误,握手失败40

Tomcat SSL致命错误,握手失败40,tomcat,ssl,certificate,tomcat6,Tomcat,Ssl,Certificate,Tomcat6,客户端发送带有密码套件中包含的密码的“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

客户端发送带有密码套件中包含的密码的“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”keystrefile=“/usr/local/tomcat6/conf/Default-Cert.p12”keystretype=“PKCS12”keystrepass=“uuuuuu”ciphers=“…”

    密码是
    SSL\u RSA\u WITH_AES\u 128\u CBC\u SHA、SSL\u RSA\u WITH_AES\u 256\u CBC\u SHA、SSL\u DHE\u RSA\u WITH_AES\u 128\u CBC\u SHA、SSL\u DHE\u RSA\u WITH_AES\u 256\u CBC\u SHA、SSL\u RSA\u WITH_3DES\u EDE\u CBC\u SHA、SSL\u DHE\u RSA\u WITH_3DES\EDE\u CBC\u CBC\SHA

  • 服务器发送“服务器Hello”,选择“TLS_RSA_WITH_AES_128_CBC_SHA 0x002f”,然后在约1.5毫秒后服务器发送致命警报(握手失败(40))


    我们能解释一下握手失败的原因吗?这是因为客户端密码列表中不包括TLS_RSA_和_AES_128_CBC_SHA吗

    SSL致命错误,握手失败40
    表示由于客户端和服务器无法就连接设置达成一致,无法建立安全连接。通常是因为客户端或服务器太旧,只支持删除的协议/密码

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

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

    • 服务器只做了SSL,不知道是哪个颠覆。SSL在问题提出之前(2015年之前)就已经过时,取而代之的是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.2https://example.org
    要测试web服务器支持哪个版本的TLS,请使用curl--help
    了解curl支持什么。请注意,截至2020年,只有TLS 1.2得到了广泛支持,而TLS 1.3正在逐步推出。可能很难获得一个版本的curl/openssl来进行旧的SSL/TLS变体的测试,因为(严重的)安全漏洞,它们都被淘汰了。

    客户端似乎没有发送
    TLS\u EMPTY\u RENEGOTIATION\u INFO\u SCSV
    。客户端处于下层,应升级以进行安全的重新协商。要测试服务器配置,请尝试
    openssl s\u client-tls1-connect:-servername
    -tls1
    -servername
    确保使用SNI。只需使用自行车开关:
    TLS\U RSA\U和RC4\U 128\U MD5
    可能不是一个好选择。(不同于分组密码中的填充预言,它可以被固定)。如果您需要几套SSLv3密码套件,请尝试
    SSL\u DHE\u RSA\u WITH_3DES\u EDE\u CBC\u SHA
    SSL\u RSA\u WITH_3DES\u EDE\u CBC\u SHA
    3DES\u EDE
    是三密钥三重DES,提供112位安全性。“…这是因为
    TLS\u RSA\u WITH_AES\u 128\u CBC\u SHA
    未包含在客户端密码列表中”-看起来它已经包含在内了。您是否安装了密码?“…服务器密码
    SSL\u RSA\u WITH_AES\u 128\u CBC\u SHA
    ”-您可以使用
    $openssl s_client-ssl3-connect:-密码“AES128-SHA”
    $openssl s_client-tls1-connect:-密码“AES128-SHA”