Ich versuche, eine Verbindung zu einem SSL-Server herzustellen, für den ich mich authentifizieren muss. Um SSL über Apache MINA verwenden zu können, benötige ich eine geeignete JKS-Datei. Ich habe jedoch nur eine .PEM-Datei erhalten.
Wie würde ich eine JKS-Datei aus einer PEM-Datei erstellen?
Antworten:
Konvertieren Sie zunächst Ihr Zertifikat in ein DER-Format:
Und danach importieren Sie es in den Keystore:
quelle
Wenn Sie nur ein Zertifikat im PEM-Format in einen Keystore importieren möchten, erledigt keytool die Aufgabe:
quelle
Ich habe http://code.google.com/p/java-keyutil/ entwickelt, das PEM-Zertifikate direkt in einen Java-Keystore importiert. Der Hauptzweck besteht darin, ein mehrteiliges PEM-Betriebssystem-Zertifikatspaket wie ca-bundle.crt zu importieren. Dazu gehören häufig Header, die Keytool nicht verarbeiten kann
quelle
keytool
das alles erledigt es bereits für Sie (und mehr). (Übrigens sollten Sie IhreFileOutputStream
und Ihre E / A-Streams schließenfinally
, wenn eine Ausnahme auftritt.)In meinem Fall hatte ich eine PEM-Datei, die zwei Zertifikate und einen verschlüsselten privaten Schlüssel zur gegenseitigen SSL-Authentifizierung enthielt. Meine PEM-Datei sah also so aus:
Hier ist was ich getan habe
Teilen Sie die Datei in drei separate Dateien auf, sodass jede nur einen Eintrag enthält, beginnend mit
---BEGIN..
und endend mit---END..
Zeilen. Nehmen wir an , wir haben jetzt drei Dateien:cert1.pem
,cert2.pem
, undpkey.pem
.Konvertieren Sie
pkey.pem
mit openssl und der folgenden Syntax in das DER-Format:Beachten Sie, dass Sie, wenn der private Schlüssel verschlüsselt ist, ein Kennwort angeben müssen (dieses vom Lieferanten der ursprünglichen PEM-Datei erhalten), um es in das DER-Format zu konvertieren.
openssl
Sie werden dann nach dem Kennwort gefragt: " Geben Sie eine Passphrase ein fürpkey.pem
:".Wenn die Konvertierung erfolgreich ist, erhalten Sie eine neue Datei mit dem Namen
pkey.der
.Erstellen Sie einen neuen Java-Keystore und importieren Sie den privaten Schlüssel und die Zertifikate:
(optional) Überprüfen Sie den Inhalt Ihres neuen Schlüsselspeichers:
Keystore-Typ: JKS Keystore-Anbieter: SUN
Ihr Keystore enthält 3 Einträge:
cn = ..., ou = ..., o = .., 2. September 2014, trustedCertEntry, Zertifikatfingerabdruck (SHA1): 2C: B8: ...
importkey, 2. September 2014, PrivateKeyEntry, Zertifikatfingerabdruck (SHA1): 9C: B0: ...
cn = ..., o = ...., 2. September 2014, trustedCertEntry, Zertifikatfingerabdruck (SHA1): 83:63: ...
(optional) Testen Sie Ihre Zertifikate und Ihren privaten Schlüssel aus Ihrem neuen Schlüsselspeicher mit Ihrem SSL-Server: (Möglicherweise möchten Sie das Debuggen als VM-Option aktivieren: -Djavax.net.debug = all)
Registrieren Sie abschließend Ihre Zertifikate bei HttpsURLConnection, wenn Sie diese verwenden möchten:
quelle
session.getPeerHost()
gibt nicht den Namen im Zertifikat zurück, sondern den Namen, mit dem Sie verbunden sind (dh denurlHostName
hier). Das wird also immer wahr sein. Du kommsttrue
sowieso immer zurück .Wenn Sie eine einfache Möglichkeit zum Laden von PEM-Dateien in Java benötigen, ohne sich mit externen Tools (opensll, keytool) befassen zu müssen, ist hier mein Code, den ich in der Produktion verwende:
Habe Spaß.
quelle
Ich vergesse immer, wie man das macht, weil es etwas ist, das ich nur ab und zu mache. Dies ist eine mögliche Lösung und es funktioniert einfach:
Führen Sie die beiden folgenden Codezeilen aus:
Fügen Sie bei Ausführung in einer Java SE-Umgebung die folgenden Optionen hinzu:
Oder fügen Sie dem Java-Code Folgendes hinzu:
Die andere Option für Schritt 2 besteht darin, nur den
keytool
Befehl zu verwenden. Unten ist ein Beispiel mit einer Kette von Zertifikaten:quelle
Ich habe den Keystore Explorer verwendet
quelle
Es gibt auch ein GUI-Tool, mit dem visuelle JKS erstellt und Zertifikate importiert werden können.
http://portecle.sourceforge.net/
quelle
Ich habe es aus dem Internet bekommen. Es funktioniert ziemlich gut für PEM-Dateien, die mehrere Einträge enthalten.
quelle