SSLHandshakeException:收到致命警报:handshake_failure

问题描述:

我们在尝试连接服务器时遇到此java SSL错误。在运行应用程序时,我们得到这个错误,然后我们必须重新启动应用程序才能再次使用。任何人都可以帮忙吗?SSLHandshakeException:收到致命警报:handshake_failure

at java.lang.Thread.run(Thread.java:662) 
Caused by: com.sun.xml.internal.ws.wsdl.parser.InaccessibleWSDLException: 2 counts of InaccessibleWSDLException. 
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 
at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.tryWithMex(RuntimeWSDLParser.java:161) 
at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:133) 
at com.sun.xml.internal.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:254) 
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:217) 
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:165) 
at com.sun.xml.internal.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:93) 
at javax.xml.ws.Service.<init>(Service.java:56) 
+0

请运行带有-Djavax.net.debug = SSL,握手您的代码和发布所产生的密钥库在这里输出。 – EJP

+0

谢谢EJP。我们在生产服务器上有时会出现此错误,并且在重新启动后再次正常工作。本地它工作正常,但我想重现它,所以我会提供一次,我在当地得到它 – Raman

here拿起,因为我面临类似的问题。

当您尝试连接的服务器没有来自授权CA的有效证书时,通常会抛出javax.net.ssl.SSLHandshakeException异常。

简而言之,您尝试连接的服务器很可能使用了自签名证书,并且您必须在Java代码中容纳该证书。这涉及到创建自定义KeyStore等。

我所做的只是向服务器提供密钥库和密钥库密码(将其设置在系统属性中),并且异常消失。

javax.net.ssl.keyStore=../keystore/keystoreFile.jks 
javax.net.ssl.keyStorePassword=yourPassword 
javax.net.ssl.trustStore=../keystore/keystoreFile.jks 
javax.net.ssl.trustStorePassword=yourPassword 
javax.net.debug=true 

您可以生成通过使用密钥工具(它是JDK /斌/密钥工具)

keytool -genkey -alias myKeyStore -keyalg RSA -keystore /home/aniket/keystore/keystoreFile.jks