javax.net.ssl.SSLHandshakeException: java.Sicherheit.cert.CertificateException: Keine X509TrustManager Umsetzung zur Verfügung
Habe ich code in meiner Anwendung, die versuchen, eine Verbindung zu einem externen host über HTTPS mit einem bestimmten Zertifikat.
Mein code sieht wie folgt aus:
//Load Two Keystores
KeyStore keystore = KeyStore.getInstance("pkcs12", "SunJSSE");
InputStream keystoreInput = new FileInputStream(cerPath);
keystore.load(keystoreInput, passwd.toCharArray());
System.out.println("Keystore has " + keystore.size() + " keys");
//load the truststore, leave it null to rely on cacerts distributed with the JVM
KeyStore truststore = KeyStore.getInstance("pkcs12", "SunJSSE");
InputStream truststoreInput = new FileInputStream(cerPath);
truststore.load(truststoreInput, passwd.toCharArray());
System.out.println("Truststore has " + truststore.size() + " keys");
//ssl context
SSLContext sslcontext = SSLContext.getInstance("TLS");
sslcontext.init(null, null, null);
SSLSocketFactory sf = new SSLSocketFactory(keystore, passwd);
Scheme https = new Scheme("https", 443, sf);
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(https);
...
client = new DefaultHttpClient(new PoolingClientConnectionManager(schemeRegistry));
...
HttpResponse httpResponse = client.execute( targetHost, httpMethod);
Die variable cerPath enthält den Pfad zum Zertifikat (xxxx.pfx) verwendet, um die Verbindung herzustellen.
In eine eigenständige Anwendung, funktioniert dies perfekt, aber in meinen spring-boot-Anwendung, die gleiche code wirft diese exception:
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No X509TrustManager implementation available
Getestet hab ich diesen code in einen normalen Spring-Anwendung, und es funktioniert auch.
Den normalen SSL-Eigenschaften () nicht funktioniert.
- Nicht sicher, warum Sie das laden der keystore-und truststore, da Sie sichtlich nicht mit Ihnen überhaupt in Ihrer
sslcontext.init(...)
. (Vielleicht nur in der Apache-HTTP-ClientSSLSocketFactory
, die nicht scheinen, nutzen Sie dieSSLContext
entweder.) - Ich denke, ja. Aber die JVM lädt die keystore des wiremock, ich weiß nicht, warum.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Am Ende haben wir das problem entdeckt.
Haben wir eine Abhängigkeit in unserer pom.xml zeigt auf den Rahmen wiremock:
Dieses framework enthält ein /keystore-Datei innerhalb der jar-Datei, die produzieren dieses problem. Wenn wir entfernen Sie diese Abhängigkeit von der pom, alles Prima funktioniert.