Servizio di sicurezza Web e certificati di Windows
-
27-09-2019 - |
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?
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.