SSLHandshakeException - %% 无效:[Session-1,SSL_RSA_WITH_3DES_EDE_CBC_SHA]

Posted

技术标签:

【中文标题】SSLHandshakeException - %% 无效:[Session-1,SSL_RSA_WITH_3DES_EDE_CBC_SHA]【英文标题】:SSLHandshakeException - %% Invalidated: [Session-1, SSL_RSA_WITH_3DES_EDE_CBC_SHA] 【发布时间】:2017-06-10 08:50:18 【问题描述】:

我正在尝试与安全服务器建立连接,Java 代码因 SSLHandshakeException 而失败。当我启用 -Djavax.net.debug=all 时,出现以下错误:

主要,RECV TLSv1.2 ALERT:致命,handshake_failure

%% 无效:[会话 1,SSL_RSA_WITH_3DES_EDE_CBC_SHA] main,调用closeSocket()

主要,处理异常:javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure

我已经进行了足够多的搜索并尝试了:-Dhttps.protocols-Dhttps.cipherSuites 选项,但它们似乎都不起作用。

我还检查了:

socketfactory.getDefaultCipherSuites() 其中列出了错误中所述的密码。

我检查了

openssl s_client -connect url:443

但它会引发错误:

验证错误:num=20:unable to get local issuer certificate

验证返回:0

58555:error:14094410:SSL 例程:SSL3_READ_BYTES:sslv3 警报握手失败:/SourceCache/OpenSSL098/OpenSSL098-52.30.1/src/ssl/s3_pkt.c:1145:SSL 警报号 40

58555:error:140790E5:SSL 例程:SSL23_WRITE:ssl 握手失败:/SourceCache/OpenSSL098/OpenSSL098-52.30.1/src/ssl/s23_lib.c:185:

感谢对此的快速帮助和指导。

我正在使用 spring ws 执行此操作,我正在创建自己的 HttpClient,因为此连接需要服务器密钥库进行连接。以下是我正在使用的代码:

    public NewHttpClient(KeyStore keyStore, String pwd, Integer maxTotal, Integer defaultMaxPerRoute) throws KeyManagementException, UnrecoverableKeyException,
NoSuchAlgorithmException, KeyStoreException 
    HttpClientBuilder builder = HttpClientBuilder.create();
    SSLContext sslContext = SSLContexts.custom().loadKeyMaterial(keyStore, pwd.toCharArray()).build();
    builder.setSSLContext(sslContext);
    SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(sslContext);
    builder.setSSLSocketFactory(sslConnectionFactory);
    Registry<ConnectionSocketFactory> schemeRegistry = RegistryBuilder.<ConnectionSocketFactory> create().register("http", PlainConnectionSocketFactory.getSocketFactory())
            .register("https", SSLConnectionSocketFactory.getSocketFactory()).build();
    PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(schemeRegistry);
    connectionManager.setMaxTotal(maxTotal);
    connectionManager.setDefaultMaxPerRoute(defaultMaxPerRoute);
    builder.setConnectionManager(connectionManager);
    customHttpClient = builder.build();

更新 1:当我使用 SOAP-UI 中的密钥库时,它可以正常工作,没有任何问题。它只是java方法中的一个问题!

更新 2:我已尝试使用 3 个 JVM 6、7 和 8,但问题仍然存在。此外,我尝试从纯 java 代码而不是 spring 来创建 SSL 连接,并且能够成功地进行握手而没有任何问题。

【问题讨论】:

在java中你使用的是哪个JVM?我在 JVM 6 上有类似的问题;当我使用 Oracle JDK 7 时,一切都很好...... JVM 6 上的相同代码产生了类似的错误 我正在使用 8。但我也尝试使用 JCE 使用 6 和 7。同样的错误! 【参考方案1】:

我看到这是基于我的更新 2 的春季问题。所以我改变了使用方法来使用

org.springframework.ws.transport.http.HttpsUrlConnectionMessageSender

&瞧,它没有任何问题。

我必须从一个新的 maven jar 导入上面的类:

  <dependency>
        <groupId>org.springframework.ws</groupId>
        <artifactId>spring-ws-support</artifactId>
        <version>2.2.0.RELEASE</version>
    </dependency>

【讨论】:

您能否提供示例代码说明您是如何使用这种新方法的

以上是关于SSLHandshakeException - %% 无效:[Session-1,SSL_RSA_WITH_3DES_EDE_CBC_SHA]的主要内容,如果未能解决你的问题,请参考以下文章

文件下载 SSLHandshakeException

SSLHandshakeException 无法验证用户身份

SSLHandshakeException:不存在主题替代名称

服务帐户引发 - SSLHandshakeException

Jmeter中的SSLHandshakeException错误

SSLHandshakeException:握手期间远程主机关闭连接