当前位置: 首页 > 知识库问答 >
问题:

SSL致命错误,握手失败40

雷方伟
2023-03-14

>

  • 客户端发送带有密码套件中包含的密码的“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的条目:

    连接器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

    服务器选择“TLS_RSA_WITH_AES_128_CBC_SHA 0x002F)”发送“服务器Hello”,并在1,5毫秒后发送致命警报(握手失败(40))。

    我们能解释握手失败吗?这是因为TLS_RSA_WITH_AES_128_CBC_SHA不包括在客户端密码列表中吗?

  • 共有1个答案

    廖诚
    2023-03-14

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

    按照历史顺序,协议依次为SSLv2、SSLv3、TLS1.0、TLS1.2、TLS1.3。

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

    • 服务器只做了SSL,不知道是哪种颠覆。SSL在问题打开之前(2015年之前)已过时,由TLS取代。
    • 客户端需要TLS。2015年可能是TLS 1.0和/或TLS 1.2。

    在这种特定情况下,服务器运行在废弃的SSL上,迫切需要升级。看起来像是Java 6号上的Tomcat6,确实在当时(2015年)已经过时了。

    如果你在2020年或以后读到这篇文章。让https工作的Java的绝对最低版本是Java 8(完全支持TLS1.2)。

    尝试curl--tlsv1.2 https://example.org测试web服务器支持哪个版本的TLS,尝试curl--help了解curl支持什么。请注意,到2020年为止,只有TLS1.2得到广泛支持,而TLS1.3正在逐步推出。可能很难获得一个curl/openssl的版本来进行旧的SSL/TLS变体的测试,因为(严重的)安全漏洞,这些变体都被淘汰了。

     类似资料:
    • 我正在尝试使用Spring RestTemplate调用POST Rest调用: 这个https://server.com有证书:webapi。tartu-x86。p12我将证书导入C:\Java_8\jre\lib\security\cacerts usinf keytool 运行代码后,我出现以下错误: 我使用的是Java1.8.091 有人能帮忙吗?

    • 我需要与外部服务连接,而且我的客户端身份验证有问题。该服务需要证书、用户名和密码以及请求。 我正在使用Windows Server 2008 R2。 我已经收到带有证书的PKCS#7包并导入: 本地计算机/个人的SSL证书(仅含公钥) 中间CA和根CA到本地计算机/受信任的RootCertificationAuthorities 我已经在Windows注册表中启用了TLS 1.0、1.1、1.2客

    • 我打以下电话给branch.io 它在我的本地机器上运行良好,但在服务器上出现故障。 Openssl版本: 本地:OpenSSL 0 . 9 . 8 ZG 2015年7月14日 服务器:OpenSSL 0.9.8e-fips-rhel5 2008年7月1日 Python: 本地:2.7.10服务器:2.7.6 分支io服务器连接: Chrome 已验证 DigiCert SHA2 安全服务器 CA

    • 我正在学习SSL通信,我遇到了这个问题。我正在编写一个简单的客户端,它试图与本地apache服务器握手。服务器启用https。我将服务器证书添加到所有可能的信任存储(jdk中的一个 注意:我从以下教程中获取了代码: http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#KRB 停留

    • 我通过受ssl v3保护的cxf使用soap服务。我从服务器下载.cer文件,并通过keytool使用以下指令创建JKS文件: 在java代码中,我将此代码用于客户端配置: 对于调用此代码的服务: 当我运行代码时,会发生此错误: 我搜索此错误,我意识到该错误是针对不良信任存储的。但我不知道如何生成正确的信任库。

    • 我得到这个错误,而试图在linux上执行和旧的MapleStory服务器,我已经尝试了相同的文件在窗口和工作没有问题。我尝试了多个Java版本没有成功。