Ich habe das folgende Problem. Ich habe einen Webservice, der Endpunkte hat, die über SSL aufgerufen werden können, und einige, die nur aufgerufen werden können, wenn auch ein Clientzertifikat verwendet wird, um den Client zu authentifizieren. Das Problem ist, dass ich das Client-Seiten-Zertifikat dynamisch ändern möchte. Mein Code lautet:
System.setProperty("javax.net.ssl.trustStore", "cacerts.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
//...
// erster Webservice-Aufruf, ohne Client-Zertifikat -> OK
//...
System.setProperty("javax.net.ssl.trustStore", "cacerts.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
System.setProperty("javax.net.ssl.keyStore", "keystore1.jks");
System.setProperty("javax.net.ssl.keyStoreType", "JKS");
System.setProperty("javax.net.ssl.keyStorePassword", "password");
//...
// zweiter Webservice-Aufruf
Mein Problem tritt beim zweiten Aufruf auf. Hier erhalte ich eine Ausnahme:
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
Wenn ich nur den zweiten Teil des Codes ausführe, funktioniert alles einwandfrei, es funktioniert perfekt (also habe ich das keystore.jks mit dem Client-Zertifikat, und der Server authentifiziert meine Anfrage korrekt). Was mache ich falsch? Wie kann ich das Client-Seiten-Zertifikat dynamisch ändern, wenn ich Webservices aufrufe?