Web服务安全性和Windows证书

时间:2010-11-23 07:59:24

标签: java windows web-services cxf wss4j

我想使用Apache CXF和WSS4J签署Web服务请求。据我所知,我需要一个包含我想用于签名的证书的JKS商店。 需要能够使用Windows证书存储中的X.509证书。在签署Web服务请求时,应从商店读取证书。 我知道如何访问商店并获得证书。但是如何使用它来签名而不是我自己的JKS商店的证书?

3 个答案:

答案 0 :(得分:1)

KeyStore不一定是JKS。您可以编写自己的JCA Provider并实现KeyStoreSpi,并让它访问Windows证书库。

答案 1 :(得分:0)

查看解释如何使用Windows密钥库的this。然后,您必须配置CXF以使用该密钥库。

答案 2 :(得分:0)

刚刚发现可以使用WSS4JOutInterceptor类来实现。 这就是它的完成方式:

1)配置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); 的属性:

client_sign.properties

2)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 文件如下所示:

StupidCallback

3)public class StupidCallback implements CallbackHandler { public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { WSPasswordCallback pc = (WSPasswordCallback) callbacks[0]; pc.setPassword("password"); } } 只返回常量字符串作为密码(其值并不重要):

 boolean rest = stt.execute("SHOW TABLES like 'bus' ");

这就是全部。