2015-12-09 43 views
7

アプリケーションが統合されているサードパーティが最近セキュリティレベルプロトコルを変更しました。つまり、My Axisクライアントは、TLSv1.1またはTLSv1.2を使用してコールを送信する必要があります。 私はいくつかの良いアイデアを、このについての他の記事を見てきました:AxisクライアントでTLSv1.2プロトコルを使用するように強制する方法

  1. here
  2. here

はコードで、これらの変更を行った後、私は私が送信されたパッケージを監視するために、つむツールを使用している 、再び呼び出しを引き起こした、と私はまだ使用されているプロトコルは、TLSv1のあるSSL層でご覧ください。

the packet snippet

私はここで間違って何をやっていますか? MyTLSSocketSecureFactoryであるのに対し

AxisProperties.setProperty("axis.socketSecureFactory", MyTLSSocketSecureFactory.class.getName()); 

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; 
    } 
} 

は、任意のコメントを本当に感謝、感謝

これは私が私の新しいSocketSecureFactoryを設定する方法です。

+0

を変更することができます。initFactory()メソッドなどで代

オーバーライドTLS 1.1または1.2の接続のみを受け入れるようになりました。 私はJDK 6 u 35、Axis 1.4を使用しています。 TLSv1 75 Alert(Level:Fatal、Description:Handshake Failure) – Sergiu

答えて

5

MyTLSSocketSecureFactoryクラスでは、独自のSSLContextインスタンスを作成し、コンテキストからsslFactoryを取得する必要があります。 3'rdパーティ -

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

これはうまくいきます。 SSLContext.getInstance( "TSLv1.2")を変更するだけです。 "TSL"からTLS .. – Krozen

0

あなたはまた、単にデフォルトのSSLContext私は正確に同じ問題を抱えている

SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); 
    sslContext.init(null, null, null); 
    SSLContext.setDefault(sslContext); 
関連する問題