Frage

Ich möchte WebService -Anforderungen mit Apache CXF und WSS4J unterschreiben. Soweit ich weiß, würde ich einen JKS -Store benötigen, der das Zertifikat enthält, das ich zur Unterzeichnung verwenden möchte. Es besteht die Anforderung, ein X.509 -Zertifikat aus dem Windows -Zertifikatspeicher zu verwenden. Das Zertifikat wird zum Zeitpunkt der Unterzeichnung der WebService -Anfrage aus dem Geschäft gelesen. Ich weiß, wie man auf das Geschäft zugreift und das Zertifikat bekommt. Aber wie kann ich es zum Signieren anstelle des Zertifikats in meinem eigenen JKS -Geschäft verwenden?

War es hilfreich?

Lösung

Der Keystore muss kein JKS sein. Sie können Ihren eigenen JCA -Anbieter schreiben und Keystorespi implementieren und auf den Windows -Zertifikatspeicher zugreifen.

Andere Tipps

Ansehen Dies Dies erklärt, wie Sie den Windows -Keystore verwenden. Anschließend müssen Sie CXF so konfigurieren, dass dieser Keystore verwendet wird.

Ich habe gerade festgestellt, dass es möglich ist, sie zu erreichen MerlinDevice Klasse. So wird es gemacht:

1) Konfigurieren von Eigenschaften für 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) die client_sign.properties Datei sieht so aus:

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) und StupidCallback Gibt einfach die konstante Zeichenfolge als Passwort zurück (sein Wert spielt keine Rolle):

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

Das ist alles.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top