Ich habe eine funktionierende App, die eine Verbindung zu vielen externen Diensten herstellt. Ich füge einen neuen SOAP-Client hinzu, der eine Client-Authentifizierung erfordert. Ich kann es zum Laufen bringen, aber nicht ohne andere Dinge in der App zu brechen, also bin ich wirklich verwirrt darüber, was vor sich geht. Einige schnelle Hintergründe:Java Client Zertifikatskonflikt
- Wir verwenden die Standardcacerts-Datei und haben dort viele vertrauenswürdige Zertifikate importiert.
- Wir haben einen privaten Schlüssel erstellt, eine Zertifikatsanforderung generiert, ein Zertifikat zurückerhalten und eine p12-Datei mit dem Zertifikat und dem privaten Schlüssel erstellt, die für die Clientauthentifizierung verwendet werden.
- Wenn wir diese p12-Datei als Schlüsselspeicher für die App geben Sie den SOAP-Client funktioniert:
-Djavax.net.ssl.keyStore = "keystore.p12" -Djavax.net.ssl.keyStorePassword =“ Passwort“-Djavax.net.ssl.keyStoreType = "pkcs12"
- Wenn wir die oben nicht tun, sondern importieren diese in die Datei cacerts tun:
keytool -importkeystore -srckeystore keystore.p12 -deskeystore cacerts -srcstoretypkkcs12
es funktioniert nicht! Es funktioniert auch nicht, wenn wir dies tun und cacerts als Keystore pro Schritt 3 angeben (mit Ausnahme des letzten Arguments, da es sich um einen anderen Geschäftstyp handelt, richtig?)
So, mit den Schritten 1-3 haben wir unsere neue Integration funktioniert , aber das Problem ist, dass andere Sachen in der App jetzt brechen! Vorher wurde kein anderer Keystore angegeben (mein Verständnis ist, dass er ohnehin auf cacerts voreingestellt ist). Wir haben jetzt Fehler wie mit AWS SES (E-Mail) Service Ausnahmen wie Werfen:
- java.lang.RuntimeException: Kann nicht instanziiert Instanz der Klasse com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient
- com .amazonaws.AmazonClientException: Kann nicht Zugriff Standard-SSL-Kontext
- java.security.NoSuchAlgorithmException: Fehler der Konstruktion Implementierung (Algorithmus: Standard, provider: SunJSSE, Klasse: sun.security.ssl.SSLContextImpl $ DefaultSSLContext)
- java.security .UnrecoverableKeyException: Schlüssel kann nicht wiederhergestellt werden
Kann mir jemand erklären, was diesen Konflikt verursacht und wie er gelöst werden kann? Vielen Dank für Ihre Hilfe!
Jeff
Haben Sie überprüft, ob Sie über Administratorrechte für den Zugriff auf jre-Sicherheitsbibliotheken/-ordner verfügen?Manchmal, wenn Sie keine Administratorrechte haben, können Sie diese Art von Ausnahmen erhalten. –
Cacerts ist der Trust Store nicht der Schlüsselspeicher. – beny23
Ich habe Zugang zu cacerts - ich habe hinzugefügt, um vertrauenswürdig dort vorher und das hat gut funktioniert. Ich bin verwirrt über den Unterschied zwischen einem Schlüssel und Trust Store. Konzeptionell verstehe ich es, aber wenn ich einen bestimmten Schlüsselspeicher spezifiziere, bricht anderes Zeug und nichts anderes wird konfiguriert. Pro Java-Dokumente und meine Dateien sieht es so aus, als sollte es auch für den Keystore auf cacerts fallen. – Jeff057