过去一个星期我一直坚持使用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上下文。我渴望得到答案。伙计们,请帮帮我。谢谢。
答案 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添加到您的项目中。