2016-08-04 2 views
0

最近、サプライヤはXML SOAP Webserviceをアップグレードし、TLSv1のサポートを廃止しました。Java Spring WSクライアント - TomcatまたはApacheが干渉していますか?

レガシーJava Springアプリケーションを少しアップグレードして、機能を再有効化しました。私は次のコードを持っています。

public boolean searchViaWS(....) throws Exception { 

    SaajSoapMessageFactory messageFactory = new SaajSoapMessageFactory(MessageFactory.newInstance()); 

    messageFactory.setSoapVersion(SoapVersion.SOAP_11); 
    XmlBeansMarshaller marshaller = new XmlBeansMarshaller(); 

    // THESE TWO LINES ARE NEW TO SUPPORT TLSv1.1 
    HttpsUrlConnectionMessageSender sender = new HttpsUrlConnectionMessageSender(); // NEW 
    sender.setSslProtocol("TLSv1.1"); // NEW 

    NSCHWebServiceClient webServiceClient = new NSCHWebServiceClient(messageFactory); 
    webServiceClient.setMessageSender(sender); // NEW ALSO 
    webServiceClient.setMarshaller(marshaller); 
    webServiceClient.setUnmarshaller(marshaller); 


    return webServiceClient.searchViaWS(....); 
} 

てwebserviceclientが行うすべては、WSDLに基づいてオブジェクトを構築し、WebServiceTemplate.marshalSendAndReceiveを呼び出すです。

今、私はこのコードをeclipseの単体テストで実行することができます。

  • 上記の新しい行がなければ、リモートホストはTLSv1を許可しないため、リモートホストが接続を切断したと言って、sslハンドシェイクの例外で失敗します。
  • 上記の新しい行で、テストが成功し、リモートサーバーから正常に応答します。したがって、私は、TLSv1.1へのプロトコールの設定はすべて必要であると考えています。

は、Eclipseでクラスパスは、それが使用していると言うのJava SE-1.6(jdk1.7.0_21提供)

しかし、私は、Apache Tomcatの6.0にリダイレクトするようにAJPを使用して実行されます私のサーバーにコードをアップロードするとき。 29をJava 1.6.0_0を実行しているCentOSボックスで実行し、同じコードを実行すると、sslハンドシェークの例外が続行されます。

プロジェクトとそのサーバーは非常に古く、私は転送プロトコルをよく理解していません。サーバ上のTomcatやApacheがTLSv1.1を使用するJavaコードの要求を無視しているため、TLSv1を使用してリモートサーバでハンドシェークエラーが発生していると思われることは間違いありませんか?

答えて

0

最後に、これに対する解決策が見つかりました。私が疑っていたように、Tomcatは問題を引き起こしていました。 私はサーバー上でJava 7にアップグレードし、tomcat binディレクトリのcatalina.shに次を追加しました。

JAVA_OPTS="$JAVA_OPTS -Dhttps.protocols=TLSv1.1,TLSv1.2" 
関連する問題