2010-11-23 13 views
7

Apache CXFとWSS4Jを使用してWebサービスリクエストに署名したいと考えています。私が知る限り、私は署名に使用したい証明書を含むJKSストアが必要です。 Windows証明書ストアからX.509証明書を使用できるようにする必要があります。証明書は、Webサービス要求に署名する時点で店舗から読み取られるものとします。 私は店にアクセスして証明書を入手する方法を知っています。しかし、自分のJKSストアの証明書ではなく、署名のためにどのように使用できますか?ウェブサービスセキュリティとWindows証明書

+0

証明書は署名に使用されません。秘密鍵にアクセスできますか?あなたは実際に何かに署名することができます。 –

答えて

1

KeyStoreはJKSのものである必要はありません。独自のJCAプロバイダを作成し、KeyStoreSpiを実装し、Windows証明書ストアにアクセスさせることができます。

+0

私の答えは役に立つのですか? – adrianboimvaser

0

Windowsキーストアの使用方法を説明しているthisをご覧ください。次に、そのキーストアを使用するようにCXFを構成する必要があります。

+0

CXFにそのストアを使用するように指示するにはどうすればよいですか? – tobiasbayer

+0

それを行うには良い方法はないようです。ここには、Java-COMブリッジを使用するための提案があります。http://objectmix.com/java/76948-accessing-certificates-windows-system-stores-java.htmlこの回答は、あなたがJNI地獄に陥っていることを示唆しています。https://lists.owasp.org/pipermail/owasp-webscarab/2010-October/001123.html – rtperson

+0

しかし、証明書をActive Directoryに保存すると、 LDAPとJNDIを通じてアクセスできます。それが私がお勧めするものです。いくつかのサンプルコードが必要なのかどうか教えてください。私は答えとして投稿します。 – rtperson

0

MerlinDeviceクラスを使用して達成することができました。 client_sign.propertiesファイルは次のようになります)

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:WSS4JOutInterceptorのプロパティの設定)

1: そのを行う方法ですそれ

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"); 
    } 
} 

それだけです。

関連する問題