Domanda

Voglio firmare le richieste di webservice utilizzando Apache CXF e WSS4J. Per quanto ne so, avrei bisogno di un JKS memorizzano contenente il certificato che voglio usare per la firma. C'è l'esigenza di essere in grado di utilizzare un certificato X.509 dall'archivio certificati di Windows. Il certificato deve essere letto dal negozio al momento della firma della richiesta webservice. So come accedere al negozio e ottenere il certificato. Ma come posso usarlo per la firma al posto del certificato dal mio negozio JKS?

È stato utile?

Soluzione

Il KeyStore non deve essere uno JKS. Si potrebbe scrivere il proprio provider JCA e implementare KeyStoreSpi, e lo hanno accesso certificati di Windows.

Altri suggerimenti

questo che spiega come utilizzare le finestre chiavi. Poi è necessario configurare CXF di usare quel chiavi.

Appena trovato è possibile ottenere utilizzando la classe MerlinDevice. È così che il suo fare:

1) Caratteristiche Configurazione per 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) L'aspetto di file client_sign.properties come questo:

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 restituisce solo stringa costante come password (il suo valore non ha molta importanza):

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

Questo è tutto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top