2012-01-13 5 views
1

IISがホストするssl対応のクライアント認証有効Webserviceを呼び出すtomcatアプリケーションがありますjavax.xml.ws.ServiceにSSLソケットを設定する方法は?

このTomcatアプリケーションは複数のwenservicesと通信し、おそらくそれぞれがPKI認証と一緒にクライアント認証を要求します。 IIS Webサービスのために

WSDLのURLは...ので、私はWSDLのURLを渡すことで

javax.xml.ws.Service(URL、のqname)コンストラクタを使用

を変更することができる事がありますカスタムのクライアントキーを使ってSSLで上記を呼び出す必要があります。上記のコンストラクタにカスタムKeyManagerで作成するsslsocketを使用するように指示するにはどうすればよいですか?私は HttpsURLConnection.setDefaultSSLSocketFactoryを使用して、IIS webservice専用のkeymanagerに従う他の発信SSL接続を強制しません。 ご返信ありがとうございます。

+0

詳細は以前の質問と同じではありませんか? http://serverfault.com/q/349392/47187(私がそこに私の答えを書いていると疑っていたので、これはStackOverflowの質問になっています。この質問にフラグを立てて、それをマイグレーションするように頼むことができます)。 – Bruno

答えて

2

your similar question on ServerFaultへの回答に続き、Tomcatの<Connectors />javax.net.sslプロパティを使用していないことを確認した場合、デフォルトのキーマネージャのキーストアを設定することは、世界の終わりではない可能性があります。 HttpsURLConnectionは、それを要求するサーバー(クライアント証明書認証は常にサーバーによって要求されます)に対してのみ認証され、証明書の発行者に一致するCAリストからクライアント証明書を要求します。これは実際には大きな問題ではないかもしれません。

問題が大きすぎると思われる場合は、com.sun.xml.internal.ws.transport.https.client.SSLSocketFactoryと呼ばれるundocumented propertyがあるようです。次のようにそのドキュメントは次のとおりです。

はBindingProvider.getRequestContext(上でこのプロパティを設定します)(のSSLSocketFactoryを) HttpsURLConnection.setSSLSocketFactoryを有効にします。プロパティ は、次のように設定されています。

SSLSocketFactory sslFactory = ...;マップctxt = ((BindingProvider)プロキシ).getRequestContext(); ctxt.put(SSL_SOCKET_FACTORY、sslFactory);

このプロパティは実験的であり、予告なく変更される可能性があります。 未来。