2011-11-25 9 views
5

だから私は、WSDLをして、ここで問題のビットに実行し、Javaで複数の本命を選択しています。たとえば、スマートカードには、署名、暗号化、識別のための複数の証明書があります。私はこのWSDLクライアント認証と複数サート

System.setProperty("javax.net.ssl.keyStore", 
    keyStore); 
    System.setProperty("javax.net.ssl.keyStorePassword", 
    keyStorePassword); 

ように私はこのtutorialを以下のよ、クライアント認証接続用のコードを生成しますが、私の知る限り、あなたはプロパティを設定することにより、WSDLにキーストアへのパスを与えるWSDLを持っています。 スマートカードのようなキーストア内の複数の証明書について、このスマートカードで使用する証明書を指定する方法がないため、問題が発生します。 wsdlがキーストア内の最初の証明書を選択するように見えますが、これは認証に間違った証明書である可能性があります。

私の質問は2倍です:

  1. は、証明書を使用するには、WSDLを伝えるためにSystem.setPropertyを行う以外に方法はありますか?ほとんどのコードがwsconsumeを使用してwsdlによって生成されているので、どの証明書を指定するために何ができますか?

  2. System.setProperty()だけでパスを指定することができます。オブジェクトを指定する方法はありますか?私がスマートカードから証明書を取得する方法は、SunPKCS11クラス(見つけたhere)を使用することです。しかし、これは私にキーストアオブジェクトを返し、私が知る限り、System.setProperty()はパスを必要とします。

ありがとうございました!

答えて

1

私はようやく私の質問への答えを見つけました。私はCXFを使用していることを覚えておいてください。

私はWSDLをWSDL2Javaのを呼び出すときに、私は、生成されたコードの束を取得します。特にAuthorizationとAuthorizationServiceという名前の承認を扱う2つの部分があります。私のコードでは、これらのリンクを呼び出すために、私はこの時点で

AuthorizationService authSvc = new AuthorizationService(); 
Authorization authWs = authSvc.getAuthorizationPort(); 

を次の操作を行い、あなたが選択した証明書から新しいキーストアを作成することで、独自のKeyManagerとTrustManagerのを構築する必要があります。始めるのに良い場所はthis

です次に、あなたはその後、あなたのHTTPConduitを作成TLSClientParameters

TLSClientParameters params = new TLSClientParameters(); 
params.setKeyManagers(keyManagers); 
params.setTrustManagers(trustManagers); 

を構築する必要があります。

HTTPConduit conduit = (HTTPConduit) ClientProxy.getClient(authWs).getConduit(); 
conduit.setTlsClientParameters(params); 

そして、あなたのユーザーが選択した証明書でWebサービスを使用することができます。

関連する問題