我使用axis使用Web服务时出现问题。这是因为axis发送了SSLv2 ClientHello,而提供webservice的服务器不支持SSLv2协议。为了解决这个问题,我必须禁用此协议。在Java中禁用它的代码是:
SocketFactory socketFactory = SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket) socketFactory.createSocket(hostname, port);
socket.setEnabledProtocols(new String[] {"SSLv3", "TLSv1"});
我指的是这些link。现在,问题是当我使用axis来使用web服务时如何禁用此协议?
答案 0 :(得分:1)
如果您使用的是Axis 2,则应该能够配置Apache HttpClient 3.x SecureProtocolSocketFactory
(请参阅Axis 2 documentation on the subject)。您应该能够在返回套接字之前在createSocket
中设置启用的协议。 (您可能也对this question感兴趣。)
对于Axis 1,您应该能够将axis.socketSecureFactory
属性设置为实现Axis SecureSocketFactory
的自己的类名,并以相同的方式配置套接字。
答案 1 :(得分:0)
对于Axis 1:
创建自定义MySocketFactory,扩展SecureScoketFatory。
String[] protocols = { "TLSv1" };//provide the list of protocols which you want to enable
((SSLSocket) sslSocket).setEnabledProtocols(protocols);
然后在您的Web服务客户端级别提供如下所示的System属性。
System.setProperty("axis.socketSecureFactory", "com.custom.MySocketFactory");