最近、サプライヤは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を使用してリモートサーバでハンドシェークエラーが発生していると思われることは間違いありませんか?