与我们的应用程序集成的第三方最近更改了他们的安全级别协议(protocol)。简而言之,My Axis 客户端现在应该使用 TLSv1.1 或 TLSv1.2 发送调用。 我看过其他关于此的帖子,其中有一些好主意:
在对代码进行这些更改后,我再次触发了调用, 我已经使用了一个截图工具来监控发送的包,我仍然在 SSL 层看到正在使用的协议(protocol)是 TLSv1。
我做错了什么?
这就是我设置新 SocketSecureFactory 的方式:
AxisProperties.setProperty("axis.socketSecureFactory", MyTLSSocketSecureFactory.class.getName());
而 MyTLSSocketSecureFactory 是:
public class MyTLSSocketSecureFactory extends JSSESocketFactory {
public MyTLSSocketSecureFactory(Hashtable attributes) {
super(attributes);
}
@Override
public Socket create(String host,int port, StringBuffer otherHeaders,BooleanHolder useFullURL)
throws Exception{
Socket s = super.create(host, port, otherHeaders, useFullURL);
((SSLSocket)s).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2"});
return s;
}
}
非常感谢任何评论, 谢谢。
最佳答案
在您的 MyTLSSocketSecureFactory 类中,您需要创建自己的 SSLContext 实例,然后从上下文中获取 sslFactory。
重写 initFactory() 方法,例如:
initFactory() {
SSLContext context = SSLContext.getInstance("TLSv1.2");
context.init(null, null, null);
sslFactory = context.getSocketFactory();
}
关于ssl - 如何强制 Axis 客户端使用 TLSv1.2 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34180289/