如何解决Axis2- SSL HANDSHAKE FAILED错误

时间:2019-09-10 07:08:44

标签: java web-services soap jax-ws axis2

过去一个星期我一直坚持使用SSL_HANDSHAKE_ERROR。我正在尝试对Web服务执行客户端身份验证。我正在使用的JAX-WS实现是Apache Axis2。借助此stack overflow answer,我能够创建自定义SSL上下文,并使用BindingProvider像下面那样设置此SSL上下文。

((org.apache.axis2.jaxws.spi.BindingProvider) service)
.getRequestContext()
.put("com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory",customSocketFactory);

以上方法无效。所以,我尝试了

((javax.xml.ws.BindingProvider) service)
.getRequestContext()
.put("com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory",customSocketFactory);

这也失败了。 我也尝试了以上两种结合方式

((javax.xml.ws.BindingProvider) service)
.getRequestContext()
.put(JAXWSProperties.SSL_SOCKET_FACTORY,customSocketFactory);

但是我反复遇到SSL_HANDSHAKE_FAILED错误。

请告诉我如何以正确的方式设置SSL上下文。我渴望得到答案。伙计们,请帮帮我。谢谢。

1 个答案:

答案 0 :(得分:0)

战斗了整整一周之后,我找到了答案。这里是。这个答案是针对JAX-WS Axis2实现的。

Protocol authhttps = new Protocol ("https", new AuthSSLProtocolSocketFactory(new URL("file://location_to_your_keystore"), "keystorePassword", new URL("file://location_to_your_truststore"), "trustStorePassword"), 443);
Protocol.registerProtocol("https", authhttps);

我从这个blog中得到了答案。您需要将Apache commons httpclient jar添加到您的项目中。