代码之家  ›  专栏  ›  技术社区  ›  tobiasbayer

Webservice安全和Windows证书

  •  7
  • tobiasbayer  · 技术社区  · 14 年前

    我想使用Apache CXF和WSS4J对webservice请求进行签名。据我所知,我需要一个JKS存储,其中包含我要用于签名的证书。 需要能够使用Windows证书存储中的X.509证书。应在签署webservice请求时从存储区读取证书。 我知道怎么去商店拿证书。但是我怎么能用它来代替我自己JKS商店的证书呢?

    3 回复  |  直到 13 年前
        1
  •  1
  •   adrianboimvaser    14 年前

    密钥库不一定是JKS的。您可以编写自己的JCA提供程序并实现keystrespi,让它访问Windows证书存储区。

        2
  •  0
  •   Community CDub    8 年前

    看看 this 这解释了如何使用windows密钥库。然后您必须配置CXF以使用该密钥库。

        3
  •  0
  •   Cat Mucius    10 年前

    只是发现使用 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");
        }
    }
    

    这就是全部。