web-dev-qa-db-ja.com

AxisクライアントにTLSv1.2プロトコルを使用するように強制する方法

私たちのアプリケーションが統合されているサードパーティは、最近、セキュリティレベルのプロトコルに変更を加えました。つまり、MyAxisクライアントはTLSv1.1またはTLSv1.2を使用して通話を送信する必要があります。私はこれに関する他の投稿を見ましたが、いくつかの良いアイデアがあります:

  1. ここ
  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;
    }
}

コメントをいただければ幸いです。ありがとうございます。

7
mesh

MyTLSSocketSecureFactoryクラスで、独自のSSLContextインスタンスを作成してから、コンテキストからsslFactoryを取得する必要があります。

InitFactory()メソッドなどをオーバーライドします。

initFactory() {
  SSLContext context = SSLContext.getInstance("TLSv1.2");
  context.init(null, null, null);
  sslFactory = context.getSocketFactory();
}
6
zgcharley

デフォルトのSSLContextを変更することもできます

    SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
    sslContext.init(null, null, null);
    SSLContext.setDefault(sslContext);
1
k107

参照 https://github.com/unkascrack/axis-ssl TLSを有効にするSSLClientAxisEngineConfigEngineConfiguration実装を導入しています。

0
Martin