7

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

4

3 回答 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 回答