2011-12-26 18 views
7

wsdl2javaを使用して生成されたAxis2スタブに簡単にクライアント証明書を添付できますか?要求ごとに動的にクライアント証明書を変更する必要があるので、キーストアに格納するだけでは私たちの場合は機能しません。クライアント証明書をAxis2に添付しますか?

これは、非SOAP呼び出しでこれが実行されているが、Axisクライアントスタブの使用に関連するものが見つからない例が見つかりました。 SOAP呼び出しのためにXMLをハックしようとすると、私は推測することができます。グラハン!

+0

¿これは、あなたが新しい証明書を使用してメッセージを取得するために、現在の証明書が必要に考慮に入れて?また、WSクライアントはキーストア内で証明書を置き換えることができなければなりません。なぜなら、キーストア以外では使用できず、javaにアクセスできるからです。 – Alfabravo

答えて

6

あなたはどの接続に応じて使用された証明書を変更する場合が行われ、あなたはこの回答で説明したように、そうするSSLContextを設定する必要があります:https://stackoverflow.com/a/3713147/372643

私の知る限りでは、アクシス2はApache HttpClient 3.xを使用しているため、必要に応じてSSLContext(およびX509KeyManager)の設定方法に従う必要があります。 SSLContextでApache HttpClientのグローバルhttpsプロトコルハンドラを設定し、クライアント証明書を選択するようにX509KeyManagerを設定して(chooseClientAlias経由で)設定するのが最も簡単な方法です。

発行者と接続先のSocket(おそらくリモートアドレス)がどちらの証明書を決定するのに十分でない場合は、アプリケーションの残りの部分との間で慎重な同期を必要とするより複雑なロジックを実装する必要があります。

EDITは:

あなたSSLContextX509KeyManager建てたら、あなたは、Apache HttpClientを3.xのにそれらを渡す必要がありますこのためにはSecureProtocolSocketFactoryをビルドして、SSLContextからソケットを構築します(SSLSocketFactorySSLContextの方法を参照)。 Apache HttpClient 3.x SSL guideに例があります。 EasySSLProtocolSocketFactoryは、サーバー証明書をチェックしないため(MITM攻撃を許可するため)避けてください。また、this implementationを試すこともできます。あなたが唯一本当にあなたのX509KeyManagerをカスタマイズする必要が

注意は、デフォルト値(具体的にはデフォルトの信頼設定)を維持するために、他のパラメータについてnullで(init経由で)あなたのSSLContextを初期化することができます。

そこで、このようなものを使用してApache HttpClientを3.xのために世界的に、このSecureProtocolSocketFactoryを「インストール」:

Protocol.registerProtocol("https", new Protocol("https", 
    (ProtocolSocketFactory)secureProtocolSocketFactory, 443)); 
+0

ありがとう、役に立つ情報。これを行う必要があります:httpClient.getHostConfiguration()。setHost( "www.whatever.com"、443、myhttps); 'Axis2内のhttpClientをどのように保持しますか?org.apacheがあります。 axis2.client.StubとServiceClientですが、これらのインスタンスから基になるhttpClientを取得するにはどうすればよいですか? – Sunny

+0

私は他の投稿と同様のアプローチを試しました。http://stackoverflow.com/a/6469030/420611しかし、私は 'EasySSLProtocolSocketFactory'か' StrictSSLProtocolSocketFactory':org.apache.commonsを使用するかどうかにかかわらず、この例外を受けています。 ssl.ProbablyBadPasswordException:おそらく悪いJKS-Keyパスワード:java.security.UnrecoverableKeyException:パスワードはnullであってはなりません。 – Sunny

+0

@Sunny、あなたのキーストアのパスワードの問題のようです。あなたの 'X509KeyManager'とは独立して、'エイリアス 'のキーストアから秘密鍵と証明書をロードする必要があります。あなたは、デフォルトの 'X509KeyManager'を"ラッピング "して、エイリアスを選択するためのあなたのロジックをオーバーライドするだけで済みます([this](http://code.google.com/p/jsslutils/source/browse/trunk/jsslutils /src/main/java/org/jsslutils/sslcontext/keymanagers/FixedServerAliasKeyManager.java)を開始点として使用します(クライアントエイリアスを除く)。 – Bruno

関連する問題