Web服务安全性和Windows证书
-
27-09-2019 - |
题
我要签名使用Apache CXF和WSS4J web服务请求。据我所知,我需要一个JKS存储包含我想使用签名的证书。 有能够从Windows证书存储区使用X.509证书的要求。证书应从商店在签署Web服务请求时被读取。 我知道如何访问存储并拿到证书。但我怎么可以用它从我自己的JKS库,而不是签署证书?
解决方案
密钥库不必是JKS一个。你可能会写自己的JCA提供者和执行KeyStoreSpi,并将其访问Windows证书存储区。
其他提示
看这个说明如何使用Windows密钥库。然后,你必须CXF配置为使用密钥库。
刚刚发现这是可能的使用MerlinDevice
类来实现。
这就是如何做:
一)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");
}
}
这是所有。。
不隶属于 StackOverflow