質問

Apache CXFとWSS4Jを使用して、WebServiceリクエストに署名したいと思います。私の知る限り、署名に使用する証明書を含むJKSストアが必要です。 Windows証明書ストアからX.509証明書を使用できる必要があります。証明書は、WebServiceリクエストに署名した時点で店から読み取られます。店にアクセスして証明書を取得する方法を知っています。しかし、自分のJKSストアからの証明書の代わりに署名に使用するにはどうすればよいですか?

役に立ちましたか?

解決

キーストアはJKSのものである必要はありません。独自のJCAプロバイダーを作成してKeyStorespiを実装し、Windows証明書ストアにアクセスできる場合があります。

他のヒント

見る これ Windows Keystoreの使用方法を説明しています。次に、そのキーストアを使用するようにCXFを構成する必要があります。

使用を達成することが可能であることがわかりました MerlinDevice クラス。それがその方法です:

1)プロパティの構成 WSS4JOutInterceptor:

Map<String,Object> outProps = new HashMap<String,Object>();
outProps.put(WSHandlerConstants.ACTION, "Signature");
outProps.put(WSHandlerConstants.USER, "Friendly_name_of_your_certificate");
outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, StupidCallback.class.getName());
outProps.put(WSHandlerConstants.SIG_PROP_FILE, "client_sign.properties");
WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);

2) client_sign.properties ファイルは次のようになります:

org.apache.ws.security.crypto.provider=org.apache.wss4j.common.crypto.MerlinDevice
keystore.provider=SunMSCAPI
cert.provider=SunMSCAPI
keystore.type=Windows-MY
truststore.type=Windows-ROOT

3)そして StupidCallback パスワードとして定数文字列を返すだけです(その値は実際には重要ではありません):

public class StupidCallback implements CallbackHandler
{
    public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException
    {
        WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
        pc.setPassword("password");
    }
}

それで全部です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top