Ich habe dies in einer ActiveMQ-Konfiguration:
<sslContext>
<sslContext keyStore="file:/home/alex/work/amq/broker.ks"
keyStorePassword="password" trustStore="file:${activemq.base}/conf/broker.ts"
trustStorePassword="password"/>
</sslContext>
Ich habe ein Paar X.509-Zertifikat und eine Schlüsseldatei.
Wie importiere ich diese beiden, um sie in SSL- und SSL + -Stomp-Connectors zu verwenden? Alle Beispiele, die ich googeln könnte, generieren den Schlüssel immer selbst, aber ich habe bereits einen Schlüssel.
Ich habe versucht
keytool -import -keystore ./broker.ks -file mycert.crt
Dies importiert jedoch nur das Zertifikat und nicht die Schlüsseldatei und führt zu
2009-05-25 13:16:24,270 [localhost:61612] ERROR TransportConnector - Could not accept connection : No available certificate or key corresponds to the SSL cipher suites which are enabled.
Ich habe versucht, das Zertifikat und den Schlüssel zu verketten, habe aber das gleiche Ergebnis erzielt.
Wie importiere ich den Schlüssel?
Antworten:
Ob Sie es glauben oder nicht, Keytool bietet keine grundlegenden Funktionen wie das Importieren eines privaten Schlüssels in den Keystore. Sie können diese Problemumgehung ausprobieren mit PKSC12 Datei mit einem privaten Schlüssel zu einem Schlüsselspeicher zu verschmelzen.
Oder verwenden Sie einfach den benutzerfreundlicheren KeyMan von IBM für die Keystore-Behandlung anstelle von keytool.exe.
quelle
Ich habe die folgenden zwei Schritte verwendet, die ich in den Kommentaren / Beiträgen gefunden habe, die in den anderen Antworten verlinkt sind:
Schritt eins: Konvertieren Sie das x.509-Zertifikat und den Schlüssel in eine pkcs12-Datei
Hinweis: Stellen Sie sicher, dass Sie ein Kennwort für die Datei pkcs12 eingeben. Andernfalls wird beim Importieren eine Nullzeigerausnahme angezeigt. (Falls jemand anderes diese Kopfschmerzen hatte). ( Danke Jocull! )
Anmerkung 2: Möglicherweise möchten Sie die
-chain
Option hinzufügen , um die vollständige Zertifikatkette beizubehalten. ( Danke Mafuba )Schritt zwei: Konvertieren Sie die Datei pkcs12 in einen Java-Keystore
Fertig
OPTIONAL Schritt Null: Erstellen Sie ein selbstsigniertes Zertifikat
Prost!
quelle
-CAfile ca.crt -caname root
die CA-Zertifikate nicht korrekt ausgegeben. Stattdessen habe ich-certfile concatenedCAFiles.pem
-chain
Argument mit openssl zu verwenden, um die vollständige Zertifikatkette in Ihre pfx / p12-Datei aufzunehmen, wenn Sie dies in Ihrem Schlüsselspeicher möchten.pvk2pfx
(ein Standard-VS-Tool, das in der VS-cmd
Eingabeaufforderung verfügbar ist ) wird ein.pfx
--äquivalent zu a ausgegeben.p12
. @ joculls Rat ist immer noch relevant; Geben Sie ein Passwort ein. Nichtopenssl
benötigt..p12
der Schlüssel das Passwort des ursprünglichen.p12.
Tomcat, mit dem er fehlschlägtjava.security.UnrecoverableKeyException: Cannot recover key
. Mit anderen Worten: Wenn Sie-deststorepass changeit -srcstorepass some-password
mit unterschiedlichen Passwörtern ausführen müssen , müssen Sie-destkeypass changeit
(mit demselben Passwort wie-deststorepass
)Keytool in Java 6 bietet folgende Funktionen: Importieren von privaten Schlüsseln in einen Java-Keystore mithilfe von Keytool
Hier sind die grundlegenden Details aus diesem Beitrag.
Konvertieren Sie das vorhandene Zertifikat mit OpenSSL in ein PKCS12. Ein Passwort ist erforderlich, wenn Sie gefragt werden, oder der zweite Schritt wird sich beschweren.
Konvertieren Sie den PKCS12 in eine Java-Keystore-Datei.
quelle
Und einer mehr:
quelle
Zuerst auf p12 konvertieren:
Erstellen Sie neue JKS ab Seite 12:
quelle
Ja, es ist in der Tat eine traurige Tatsache, dass Keytool keine Funktionalität zum Importieren eines privaten Schlüssels hat.
Am Ende habe ich mich für die hier beschriebene Lösung entschieden
quelle
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:
Folgendes habe ich getan:
Teilen Sie die Datei in drei separate Dateien auf, sodass jede nur einen Eintrag enthält, beginnend mit "--- BEGIN .." und endend mit "--- END ..". Nehmen wir an, wir haben jetzt drei Dateien: cert1.pem cert2.pem und pkey.pem
Konvertieren Sie pkey.pem mit openssl und der folgenden Syntax in das DER-Format:
openssl pkcs8 -topk8 -nocrypt -in pkey.pem -inform PEM -out pkey.der -outform DER
Beachten Sie, dass, wenn der private Schlüssel verschlüsselt ist, Sie ein Passwort angeben müssen (erhalten Sie es vom Lieferanten der ursprünglichen PEM-Datei), um es in das DER-Format zu konvertieren. OpenSL fragt Sie nach dem Passwort wie folgt: "Geben Sie eine Pass-Phraze für pkey ein .pem: "Wenn die Konvertierung erfolgreich ist, erhalten Sie eine neue Datei mit dem Namen" pkey.der ".
Erstellen Sie einen neuen Java-Schlüsselspeicher und importieren Sie den privaten Schlüssel und die Zertifikate:
(optional) Überprüfen Sie den Inhalt Ihres neuen Schlüsselspeichers:
keytool -list -keystore mykeystore -storepass password
(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
HttpsURLConnection
anstatt zu versuchen, Ihre eigenen zu schreiben. (Ein weiteres Problem mit Ihrem Beispiel ist, dass Sie den gleichen Schlüsselspeicher wie einen Schlüsselspeicher und einen Truststore verwenden, was nicht immer eine gute Idee ist ...)Basierend auf den obigen Antworten erfahren Sie hier, wie Sie einen brandneuen Keystore für Ihren Java-basierten Webserver aus einem unabhängig erstellten Comodo-Zertifikat und einem privaten Schlüssel mit keytool erstellen (JDK 1.6+ erforderlich).
Geben Sie diesen Befehl ein und geben Sie an der Kennwortabfrage einen Pass ein. 'Server.crt' ist das Zertifikat Ihres Servers und 'server.key' ist der private Schlüssel, den Sie für die Ausgabe des CSR verwendet haben:
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name www.yourdomain.com -CAfile AddTrustExternalCARoot.crt -caname "AddTrust External CA Root"
Verwenden Sie dann Keytool, um den p12-Keystore in einen jks-Keystore zu konvertieren:
keytool -importkeystore -deststorepass somepass -destkeypass somepass -destkeystore keystore.jks -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass somepass
Importieren Sie dann die beiden anderen Root- / Intermediate-Zertifikate, die Sie von Comodo erhalten haben:
Importieren Sie COMODORSAAddTrustCA.crt:
keytool -import -trustcacerts -alias cert1 -file COMODORSAAddTrustCA.crt -keystore keystore.jks
Importieren Sie COMODORSADomainValidationSecureServerCA.crt:
keytool -import -trustcacerts -alias cert2 -file COMODORSADomainValidationSecureServerCA.crt -keystore keystore.jks
quelle
Verwenden von Let's Encrypt-Zertifikaten
Angenommen, Sie haben Ihre Zertifikate und privaten Schlüssel mit Let's Encrypt erstellt in
/etc/letsencrypt/live/you.com
:1. Erstellen Sie eine PKCS # 12- Datei
Dies kombiniert Ihr SSL-Zertifikat
fullchain.pem
und Ihren privaten Schlüsselprivkey.pem
in einer einzigen Dateipkcs.p12
.Sie werden aufgefordert, ein Passwort für einzugeben
pkcs.p12
.Die
export
Option gibt an, dass eine PKCS # 12-Datei erstellt und nicht analysiert wird (aus dem Handbuch ).2. Erstellen Sie den Java-Keystore
Wenn
keystore.jks
es nicht vorhanden ist, wird es mit derpkcs.12
oben erstellten Datei erstellt. Andernfalls importieren Siepkcs.12
in den vorhandenen Schlüsselspeicher.Diese Anweisungen stammen aus diesem Blog-Beitrag .
Hier erfahren Sie mehr über die verschiedenen Arten von Dateien in
/etc/letsencrypt/live/you.com/
.quelle
Mit diesen Schritten können Sie den Schlüssel in einen vorhandenen Schlüsselspeicher importieren. Die Anweisungen werden aus den Antworten in diesem Thread und anderen Websites kombiniert. Diese Anleitung hat bei mir funktioniert (der Java Keystore):
openssl pkcs12 -export -in yourserver.crt -inkey yourkey.key -out server.p12 -name somename -certfile yourca.crt -caname root
(Falls erforderlich, setzen Sie die Option -chain. Das Setzen ist für mich fehlgeschlagen.) Dies fragt nach dem Passwort - Sie müssen das richtige Passwort eingeben, sonst erhalten Sie einen Fehler (Überschriftenfehler oder Auffüllfehler usw.).
*.jks
Datei zu importieren, führen Sie Folgendes aus:keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -destkeystore yourexistingjavakeystore.jks -deststoretype JKS -deststorepass existingjavastorepassword -destkeypass existingjavastorepassword
den Dateilauf (Sehr wichtig - lassen Sie die Parameter deststorepass und destkeypass nicht aus.)
quelle
Frühere Antworten weisen richtig darauf hin, dass Sie dies nur mit den Standard-JDK-Tools tun können, indem Sie zuerst die JKS-Datei in das PKCS # 12-Format konvertieren. Wenn Sie interessiert sind, habe ich ein kompaktes Dienstprogramm zum Importieren von OpenSSL-abgeleiteten Schlüsseln in einen JKS-formatierten Schlüsselspeicher zusammengestellt, ohne den Schlüsselspeicher zuerst in PKCS # 12 konvertieren zu müssen: http://commandlinefanatic.com/cgi-bin/showarticle. cgi? article = art049
Sie würden das verknüpfte Dienstprogramm wie folgt verwenden:
(CSR unterschreiben, localhost.cer zurückholen)
quelle
Wenn Sie eine PEM-Datei (z. B.
server.pem
) haben, die Folgendes enthält:Anschließend können Sie das Zertifikat und den Schlüssel wie folgt in einen JKS-Keystore importieren:
1 ) Kopieren Sie den privaten Schlüssel aus der PEM-Datei in eine ASCII-Datei (z
server.key
)2 ) Kopieren Sie das Zertifikat aus der PEM-Datei in eine ASCII-Datei (z
server.crt
)3 ) Exportieren Sie das Zertifikat und den Schlüssel in eine PKCS12-Datei:
-CAfile
Option verwendet werden .winpty
es am Anfang des Befehls hinzu, damit das Exportkennwort eingegeben werden kann.4 ) Konvertieren Sie die PKCS12-Datei in einen JKS-Keystore:
srcstorepass
Passwort sollte mit dem Exportpasswort aus Schritt 3) übereinstimmen.quelle
Was ich erreichen wollte, war die Verwendung des bereits bereitgestellten privaten Schlüssels und Zertifikats zum Signieren einer Nachricht, die an einen Ort ging, an dem sichergestellt werden musste, dass die Nachricht von mir kam (privates Schlüsselzeichen, während öffentliche Schlüssel verschlüsseln).
Also, wenn Sie bereits eine .key-Datei und eine .crt-Datei haben?
Versuche dies:
Schritt 1: Konvertieren Sie den Schlüssel und das Zertifikat in die P12-Datei
Schritt 2: Importieren Sie den Schlüssel und erstellen Sie eine .jsk-Datei mit einem einzigen Befehl
Schritt 3: In Ihrem Java:
Wenn Sie mit diesem Schlüssel eine Zeichenfolge signieren müssen, gehen Sie wie folgt vor:
Schritt 1: Konvertieren Sie den zu verschlüsselnden Text
Schritt 2: Holen Sie sich den Base64-codierten privaten Schlüssel
Verweise:
Endgültiges Programm
quelle
Erstellen Sie einfach einen PKCS12-Keystore, Java kann ihn jetzt direkt verwenden. Wenn Sie einen Keystore im Java-Stil auflisten, weist Sie das Keytool selbst darauf hin, dass PKCS12 jetzt das bevorzugte Format ist.
Sie sollten alle drei Dateien (server.crt, server.key, ca.crt) von Ihrem Zertifikatanbieter erhalten haben. Ich bin nicht sicher, was "-caname root" eigentlich bedeutet, aber es scheint so spezifiziert werden zu müssen.
Stellen Sie im Java-Code sicher, dass Sie den richtigen Keystore-Typ angeben.
Auf diese Weise funktioniert mein von comodo.com ausgestelltes SSL-Zertifikat in NanoHTTPD einwandfrei.
quelle
In einem Fall von Elliptic Curve und Beantwortung der Frage zum Importieren eines vorhandenen x509-Zertifikats und eines privaten Schlüssels im Java-Keystore möchten Sie möglicherweise auch einen Blick auf diesen Thread werfen. So lesen Sie den privaten EC-Schlüssel in Java im PEM-Dateiformat
quelle