Pergunta

Quero assinar solicitações do WebService usando o Apache CXF e o WSS4J. Até onde eu sei, eu precisaria de uma loja JKS contendo o certificado que quero usar para assinar. Existe o requisito de poder usar um certificado X.509 no Store de Certificados do Windows. O certificado deve ser lido na loja no momento da assinatura da solicitação de serviço da web. Eu sei como acessar a loja e obter o certificado. Mas como posso usá -lo para assinar em vez do certificado da minha própria loja JKS?

Foi útil?

Solução

A keystore não precisa ser JKs. Você pode escrever seu próprio provedor da JCA e implementar o KeyStorSPI e acessar o Windows Certificate Store.

Outras dicas

Olhe para isto Isso explica como usar o Windows Keystore. Então você precisa configurar o CXF para usar essa parte do keystore.

Acabei de descobrir que é possível alcançar o uso MerlinDevice classe. É assim que se faz:

1) Configurando propriedades para 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) o client_sign.properties O arquivo se parece com o seguinte:

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) e StupidCallback Basta retornar string constante como uma senha (seu valor realmente não importa):

public class StupidCallback implements CallbackHandler
{
    public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException
    {
        WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
        pc.setPassword("password");
    }
}

Isso é tudo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top