Java8、JBoss AS5、SSLException:“收到致命警报:handshake_failure”

Posted

技术标签:

【中文标题】Java8、JBoss AS5、SSLException:“收到致命警报:handshake_failure”【英文标题】:Java8, JBoss AS5, SSLException: "Received fatal alert: handshake_failure" 【发布时间】:2018-09-02 09:41:57 【问题描述】:

我的 java 应用程序由 JBoss AS 5 运行。我试图通过 URL 连接以下载图像,但我收到下一个异常:javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

我已将 trust-managet 配置为“全信任信任管理器”:

 TrustManager[] trustAllCerts = new TrustManager[]
        new X509TrustManager() 
            @Override
            public java.security.cert.X509Certificate[] getAcceptedIssuers() 
                return null;
            
            @Override
            public void checkClientTrusted(
                java.security.cert.X509Certificate[] certs, String authType) 
            
            @Override
            public void checkServerTrusted(
                java.security.cert.X509Certificate[] certs, String authType) 
            
        
    ;

    // Install the all-trusting trust manager
    try 
        SSLContext sc = SSLContext.getInstance("TLSv1.2");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
     catch (Exception e) 
    

    HostnameVerifier hv = new HostnameVerifier() 
        @Override
        public boolean verify(String urlHostName, SSLSession session) 
            return true;
        
    ;
    HttpsURLConnection.setDefaultHostnameVerifier(hv);

我的简单java代码:

URL url = new URL("https://cdn.hotelbeds.com/giata/62/623081/623081a_hb_ro_007.jpg");
        url.openConnection().connect();

我已激活 ssl 调试模式 (-Djavax.net.debug=ssl) 并收到以下日志:

`18:20:23,030 INFO [STDOUT] 允许不安全的重新协商:false 允许遗留问候消息:true 是否是初始握手:true 是否安全重新协商:错误 18:20:23,031 信息 [STDOUT] WorkerThread#1[10.0.0.38:52361],调用 setSoTimeout(0) 18:20:23,032 信息 [STDOUT] 忽略不支持的密码套件:TLSv1 的 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 18:20:23,032 信息 [STDOUT] 忽略不支持的密码套件:TLSv1 的 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 18:20:23,032 信息 [STDOUT] 忽略不支持的密码套件:TLSv1 的 TLS_RSA_WITH_AES_128_CBC_SHA256 18:20:23,032 信息 [STDOUT] 忽略不支持的密码套件:TLSv1 的 TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 18:20:23,032 信息 [STDOUT] 忽略不支持的密码套件:TLSv1 的 TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 18:20:23,032 信息 [STDOUT] 忽略不支持的密码套件:TLSv1 的 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 18:20:23,032 信息 [STDOUT] 忽略不支持的密码套件:TLSv1 的 TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 18:20:23,032 信息 [STDOUT] 忽略不支持的密码套件:TLSv1.1 的 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 18:20:23,032 信息 [STDOUT] 忽略不支持的密码套件:TLSv1.1 的 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 18:20:23,032 信息 [STDOUT] 忽略不支持的密码套件:TLSv1.1 的 TLS_RSA_WITH_AES_128_CBC_SHA256 18:20:23,032 信息 [STDOUT] 忽略不支持的密码套件:TLSv1.1 的 TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 18:20:23,032 信息 [STDOUT] 忽略不支持的密码套件:TLSv1.1 的 TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 18:20:23,032 信息 [STDOUT] 忽略不支持的密码套件:TLSv1.1 的 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 18:20:23,032 信息 [STDOUT] 忽略不支持的密码套件:TLSv1.1 的 TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 ..................... 18:20:23036 INFO [STDOUT]密码套件:[TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 ,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_DSS_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,S SL_DHE_RSA_WITH_3DES_EDE_CBC_SHA、SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA、TLS_EMPTY_RENEGOTIATION_INFO_SCSV] 18:20:23,036 INFO [STDOUT] 压缩方法:0 18:20:23,036 INFO [STDOUT] 扩展椭圆曲线,曲线名称:secp256r1, secp384r1, secp521r1, sect283k1, sect283r1, sect409k1, sect409r1, sect571k1, sect571r1, secp256k1 18:20:23,036 INFO [STDOUT] 扩展 ec_point_formats,格式:[未压缩] 18:20:23,036 信息 [STDOUT] 扩展签名算法,签名算法:SHA512withECDSA、SHA512withRSA、SHA384withECDSA、SHA384withRSA、SHA256withECDSA、SHA256withRSA、SHA256withDSA、SHA1withECDSA、SHA1withRSA、SHA1withDSA 18:20:23,037 信息 [STDOUT] WorkerThread#1[10.0.0.38:52361],写入:TLSv1.2 握手,长度 = 161 18:20:23,065 信息 [STDOUT] WorkerThread#1[10.0.0.38:52361],阅读:TLSv1.2 警报,长度 = 2 18:20:23,066 信息 [标准输出] WorkerThread#1 [10.0.0.38:52361] 18:20:23,066 信息 [STDOUT] RECV TLSv1.2 警报:致命,握手失败 18:20:23,066 INFO [STDOUT] WorkerThread#1[10.0.0.38:52361],调用 closeSocket() 18:20:23,066 INFO [STDOUT] WorkerThread#1[10.0.0.38:52361],处理异常:javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure

我还尝试使用以下“解决方案”的属性:

https.protocols=TLSv1.2,TLSv1.1,TLSv1 crypto.policy=unlimited

java 版本为 1.8.0_131。我应该怎么做才能连接到这个网站并下载这个图像?

提前致谢。

【问题讨论】:

【参考方案1】:

它看起来很像我在检查您的网站与 SSLLabs 时看到的内容以及调试输出中不存在 扩展名 的副本。我的答案和解决方案(升级 Java)请参阅 here。

【讨论】:

以上是关于Java8、JBoss AS5、SSLException:“收到致命警报:handshake_failure”的主要内容,如果未能解决你的问题,请参考以下文章

JBoss EAP 7.1.0 中的 Wildfly 版本

JBoss EAP 7.3 上的 Primefaces 6 文件上传问题

JBoss AS7部署插件(jboss-as-maven-plugin)

当我无法访问 CLI 工具时,如何关闭 JBoss Wildfly?

Jboss EAP 6.4 无法在模块中定义类 org.springframework.web.servlet.DispatcherServlet

菜鸟求助:Red Hat linux AS5 怎么安装net-core磊科 NW336 无线网卡驱动呢? 越详细越好,要有具体步骤哦