我想使用 Apache CXF 和 WSS4J 签署 web 服务请求。据我所知,我需要一个包含要用于签名的证书的 JKS 存储。需要能够使用来自 Windows 证书存储的 X.509 证书。证书应在签署 Web 服务请求时从存储中读取。我知道如何访问商店并获得证书。但是我怎样才能用它来签名而不是我自己的 JKS 商店的证书呢?
问问题
873 次
3 回答
1
KeyStore 不必是 JKS 的。您可以编写自己的 JCA Provider 并实现 KeyStoreSpi,并让它访问 Windows 证书存储。
于 2011-01-19T00:28:18.010 回答
0
看看 这个解释如何使用 windows 密钥库。然后您必须配置 CXF 以使用该密钥库。
于 2010-12-02T08:02:32.753 回答
0
刚刚发现可以使用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");
}
}
就这样。
于 2015-05-03T22:27:39.697 回答