私たちのアプリケーションが統合されているサードパーティは、最近、セキュリティレベルのプロトコルに変更を加えました。つまり、MyAxisクライアントはTLSv1.1またはTLSv1.2を使用して通話を送信する必要があります。私はこれに関する他の投稿を見ましたが、いくつかの良いアイデアがあります:
コードにこれらの変更を加えた後、呼び出しを再度トリガーし、Snipping Toolを使用して送信済みパッケージを監視しましたが、SSLレイヤーで、使用されているプロトコルが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();
}
デフォルトのSSLContextを変更することもできます
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(null, null, null);
SSLContext.setDefault(sslContext);
参照 https://github.com/unkascrack/axis-ssl TLSを有効にするSSLClientAxisEngineConfigEngineConfiguration実装を導入しています。