Extrahieren Sie den öffentlichen / privaten Schlüssel aus der PKCS12-Datei zur späteren Verwendung in der SSH-PK-Authentifizierung

Ich möchte den öffentlichen und privaten Schlüssel aus meiner PKCS # 12-Datei extrahieren für die spätere Verwendung in SSH-Public-Key-Authentifizierung.

Momentan erzeuge ich Schlüssel über ssh-keygen, die ich in .ssh / authorized_key , also irgendwo auf der Client-Seite ablege .

In Zukunft möchte ich die Schlüssel aus einem PKCS # 12-Container verwenden, also muss ich zuerst den öffentlichen Schlüssel aus PKCS # 12 extrahieren und ihn dann in die .ssh / authorized_keys- Datei einfügen. Gibt es eine Chance, dies über openssl zu erledigen? Sind die Schlüssel in PKCS # 12 für die ssh-public-key-Authentifizierung kompatibel?

Sie können folgende Befehle verwenden, um einen öffentlichen / privaten Schlüssel aus einem PKCS # 12-Container zu extrahieren:

  • PKCS # 1 Privater Schlüssel

    openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem 
  • Zertifikate:

     openssl pkcs12 -in yourP12File.pfx -clcerts -nokeys -out publicCert.pem 

Dies ist mit ein bisschen Formatkonvertierung möglich.

Um den privaten Schlüssel in einem Format zu extrahieren, kann openssh folgendes verwenden:

 openssl pkcs12 -in pkcs12.pfx -nocerts -nodes | openssl rsa > id_rsa 

So konvertieren Sie den privaten Schlüssel in einen öffentlichen Schlüssel:

 openssl rsa -in id_rsa -pubout | ssh-keygen -f /dev/stdin -i -m PKCS8 

Um den öffentlichen Schlüssel in einem Format zu extrahieren, kann openssh folgendes verwenden:

 openssl pkcs12 -in pkcs12.pfx -clcerts -nokeys | openssl x509 -pubkey -noout | ssh-keygen -f /dev/stdin -i -m PKCS8 

OpenSSH kann PKCS # 12-Dateien nicht sofort verwenden. Wie andere vorgeschlagen haben, müssen Sie den privaten Schlüssel im PEM-Format extrahieren, der Sie aus dem Land von OpenSSL nach OpenSSH bringt. Andere hier erwähnte Lösungen funktionieren nicht für mich. Ich benutze OS X 10.9 Mavericks (10.9.3 im Moment) mit “vorgepackten” Dienstprogrammen (OpenSSL 0.9.8y, OpenSSH 6.2p2).

Entpacken Sie zunächst einen privaten Schlüssel im PEM-Format, der direkt von OpenSSH verwendet wird:

 openssl pkcs12 -in filename.p12 -clcerts -nodes -nocerts | openssl rsa > ~/.ssh/id_rsa 

Ich empfehle dringend, den privaten Schlüssel mit Passwort zu verschlüsseln:

 openssl pkcs12 -in filename.p12 -clcerts -nodes -nocerts | openssl rsa -passout 'pass:Passw0rd!' > ~/.ssh/id_rsa 

Offensichtlich ist das Schreiben eines Klartext-Passworts in der Befehlszeile auch nicht sicher, daher sollten Sie den letzten Befehl aus dem Verlauf löschen oder einfach so einrichten, dass er nicht dorthin gelangt. Verschiedene Shells haben unterschiedliche Möglichkeiten. Sie können Ihren Befehl mit Leerzeichen voranstellen, um zu verhindern, dass er in Bash und vielen anderen Shells im Verlauf gespeichert wird. Hier ist auch, wie Sie den Befehl aus dem Verlauf in Bash löschen:

 history -d $(history | tail -n 2 | awk 'NR == 1 { print $1 }') 

Alternativ können Sie einen anderen Schlüssel verwenden, um ein Kennwort für den privaten Schlüssel an OpenSSL zu übergeben – konsultieren Sie die OpenSSL-Dokumentation für Passphrase-Argumente .

Erstellen Sie anschließend einen öffentlichen OpenSSH-Schlüssel, der zur Datei authorized_keys hinzugefügt werden kann:

 ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub 

Lösung 1:

Extrahiere P12 von jks

 keytool -importkeystore -srckeystore MyRootCA.jks -destkeystore MyRootCA.p12 -deststoretype PKCS12 

Extrahiere PEM aus P12 und bearbeite Datei und PEM aus CRT-Datei

 openssl pkcs12 -in MyRootCA.p12 -clcerts -nokeys -out MyRootCA.crt 

Schlüssel aus JKS extrahieren

 openssl pkcs12 -in MyRootCA.p12 -nocerts -out encryptedPrivateKey.pem openssl rsa -in encryptedPrivateKey.pem -out decryptedPrivateKey.key 

Lösung 2:

Extrahiere PEM und encryptedPrivateKey in txt file“`

 openssl pkcs12 -in MyRootCA.p12 -out keys_out.txt 

PrivateKey entschlüsseln

 openssl rsa -in encryptedPrivateKey.key [-outform PEM] -out decryptedPrivateKey.key 

Soweit ich weiß, ist PKCS # 12 nur ein Zertifikat / öffentlicher / privater Schlüsselspeicher. Wenn Sie einen öffentlichen Schlüssel aus der PKCS # 12-Datei extrahiert haben, sollte OpenSSH in der Lage sein, ihn zu verwenden, solange er im PEM- Format extrahiert wurde. Wahrscheinlich wissen Sie bereits, dass Sie auch einen entsprechenden privaten Schlüssel (auch in PEM ) benötigen, um ihn für die ssh-public-key-Authentifizierung zu verwenden.