Ich möchte ein selbstsigniertes Zertifikat in Java importieren, damit jede Java-Anwendung, die versucht, eine SSL-Verbindung herzustellen, diesem Zertifikat vertraut.
Bisher habe ich es geschafft, es zu importieren
keytool -import -trustcacerts -noprompt -storepass changeit -alias $REMHOST -file $REMHOST.pem
keytool -import -trustcacerts -noprompt -keystore cacerts -storepass changeit -alias $REMHOST -file $REMHOST.pem
Wenn ich versuche zu rennen, HTTPSClient.class
bekomme ich trotzdem:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX-Pfaderstellung fehlgeschlagen: sun.security.provider.certpath.SunCertPathBuilderException: Es konnte kein gültiger Zertifizierungspfad zum angeforderten Ziel gefunden werden
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider())
sind im ersten Teil völlig unnötig. Der zweite führt keine Zertifikatsüberprüfung durch. Versuchen Sie es zunächst mit einer EbeneURLConnection
. Sind Sie sicher , dass Sie geändert habencacerts
inlib/security
Ihrer JRE - Installation? Haben Sie dietrustmanager
Debugging-Option ausprobiert ?Antworten:
Unter Windows ist es am einfachsten, das Programm portecle zu verwenden .
System.out.println(System.getProperty("java.home"));
Unter Linux:
Sie können das SSL-Zertifikat von einem Webserver herunterladen, der es bereits wie folgt verwendet:
Überprüfen Sie optional die Zertifikatinformationen:
Importieren Sie das Zertifikat in den Java Cacerts-Keystore:
quelle
ps -ef | grep java
die mir sagte , mein Java von openjdk unter / usr / lib / jvm / java-openjdk gelegen ausgeführt wurde / bin / java. Auch wenn dies für eine Webanwendung gilt, denken Sie daran, neu zu starten. Danke für die Hilfe!!quelle
Am Ende habe ich ein kleines Skript geschrieben, das die Zertifikate zu den Keystores hinzufügt, sodass die Verwendung viel einfacher ist.
Die neueste Version erhalten Sie unter https://github.com/ssbarnea/keytool-trust
`` `
quelle
Das hat bei mir funktioniert. :) :)
quelle
Wenn Sie ein von einer Zertifizierungsstelle signiertes Zertifikat verwenden, das standardmäßig nicht in der Java-Cacerts-Datei enthalten ist, müssen Sie die folgende Konfiguration für HTTPS-Verbindungen durchführen. So importieren Sie Zertifikate in Zertifikate:
quelle
Der einfache Befehl 'keytool' funktioniert auch unter Windows und / oder mit Cygwin.
WENN Sie Cygwin verwenden , ist hier der geänderte Befehl, den ich am Ende der Antwort von "S.Botha" verwendet habe:
Führen Sie den Befehl keytool von dort aus aus, wo Sie am Ende den Pfad zu Ihrem neuen Zertifikat angeben, wie folgt:
Beachten Sie, dass Sie unter Cygwin einen Pfad zu einem Nicht-Cygwin-Programm angeben, sodass der Pfad DOS-ähnlich und in Anführungszeichen steht.
quelle
Vielleicht möchten Sie es versuchen
Ich habe ehrlich gesagt keine Ahnung, wo es Ihr Zertifikat ablegt, wenn Sie nur schreiben,
cacerts
geben Sie ihm einen vollständigen Pfadquelle
Installieren Sie das Zertifikat unter Java Linux
/ opt / jdk (version) / bin / keytool -import -alias aliasname -file certificate.cer -keystore cacerts -storepass password
quelle
quelle