Question

Je veux signer des demandes de WebService en utilisant Apache CXF et WSS4J. Pour autant que je sache, je aurais besoin d'un JKS stocker contenant le certificat que je veux utiliser pour la signature. Il y a l'obligation d'être en mesure d'utiliser un certificat X.509 à partir du magasin de certificats Windows. Le certificat doit être lu à partir du magasin au moment de la signature de la demande de webservice. Je sais comment accéder au magasin et obtenir le certificat. Mais comment puis-je utiliser pour la signature au lieu du certificat de mon propre magasin de JKS?

Était-ce utile?

La solution

Le KeyStore ne doit pas être un JKS. Vous pouvez écrire votre propre fournisseur JCA et mettre en œuvre KeyStoreSpi, et avoir accès au magasin de certificats Windows.

Autres conseils

Regardez cette qui explique comment utiliser les fenêtres keystore. Ensuite, vous devez configurer CXF d'utiliser ce fichier de clés.

Juste trouvé il est possible de réaliser en utilisant la classe MerlinDevice. C'est comment son fait:

1) Configuration des propriétés pour 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) Le fichier client_sign.properties ressemble à ceci:

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) Et StupidCallback retourne juste chaîne constante en tant que mot de passe (sa valeur ne compte pas vraiment):

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

C'est tout.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top