it-swarm.com.de

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

Ich möchte den öffentlichen und privaten Schlüssel aus meiner PKCS # 12-Datei extrahieren, um ihn später für die SSH-Authentifizierung mit öffentlichem Schlüssel zu verwenden.

Momentan generiere ich Schlüssel mit ssh-keygen, die ich in . Ssh/authorized_key irgendwo auf der Clientseite abgelegt habe.

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 dann in die Datei .ssh/authorized_keys - einfügen . Gibt es eine Möglichkeit, dies über openssl zum Laufen zu bringen? Sind die Schlüssel in PKCS # 12 für die ssh-public-key-Authentifizierung kompatibel?

177
lazydaemon

Mit den folgenden Befehlen können Sie einen öffentlichen/privaten Schlüssel aus einem PKCS # 12-Container 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
    
268
Nilesh

Dies ist mit ein wenig 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
81
ryanc

OpenSSH kann standardmäßig keine PKCS # 12-Dateien verwenden. Wie andere vorgeschlagen haben, müssen Sie den privaten Schlüssel im PEM-Format extrahieren, um aus dem Land von OpenSSL nach OpenSSH zu gelangen. Andere hier erwähnte Lösungen funktionieren für mich nicht. Ich verwende OS X 10.9 Mavericks (derzeit 10.9.3) mit vorgefertigten Dienstprogrammen (OpenSSL 0.9.8y, OpenSSH 6.2p2).

Extrahieren 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 einem Passwort zu verschlüsseln:

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

Natürlich ist das Schreiben eines Nur-Text-Kennworts in der Befehlszeile auch nicht sicher. Sie sollten daher den letzten Befehl aus dem Verlauf löschen oder nur sicherstellen, dass er nicht dort ankommt. Unterschiedliche Muscheln haben unterschiedliche Arten. Sie können Ihrem Befehl ein Leerzeichen voranstellen, um zu verhindern, dass er in Bash und vielen anderen Shells im Verlauf gespeichert wird. So löschen Sie den Befehl auch in Bash aus dem Verlauf:

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

Alternativ können Sie OpenSSL auch auf andere Weise ein Kennwort für einen privaten Schlüssel übergeben - siehe OpenSSL-Dokumentation für Argumente für Passphrasen .

Erstellen Sie dann 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
15
frzng

Lösung 1:

P12 aus jks extrahieren

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

PEM aus P12 extrahieren und Datei bearbeiten 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 die txt-Datei```

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

PrivateKey entschlüsseln

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

Update: Mir ist aufgefallen, dass meine Antwort nur ein schlechtes Duplikat einer gut erklärten Frage auf https://unix.stackexchange.com/ ... von BryKKan

Hier ist ein Auszug daraus:

openssl pkcs12 -in <filename.pfx> -nocerts -nodes | sed -ne '/-BEGIN PRIVATE KEY-/,/-END PRIVATE KEY-/p' > <clientcert.key>

openssl pkcs12 -in <filename.pfx> -clcerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <clientcert.cer>

openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <cacerts.cer>
1
gvlax

Die akzeptierte Antwort ist der richtige Befehl. Ich möchte nur eine zusätzliche Sache hinzufügen. Wenn Sie beim Extrahieren des Schlüssels das PEM-Passwort ("Enter PEM pass phrase:") leer lassen, wird nicht der komplette Schlüssel extrahiert, sondern nur die localKeyID extrahiert werden. Um den vollständigen Schlüssel zu erhalten, müssen Sie ein PEM-Kennwort angeben, das den folgenden Befehl ausführt.

Bitte beachten Sie, dass Sie beim Importieren des Passworts das tatsächliche Passwort für "Enter Import Password:" angeben oder dieses Passwort leer lassen können.

openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem
0
Arvind Sachdeva

Soweit ich weiß, ist PKCS # 12 nur ein Speicher für Zertifikate/öffentliche/private Schlüssel. Wenn Sie einen öffentlichen Schlüssel aus einer PKCS # 12-Datei extrahiert haben, sollte OpenSSH ihn verwenden können, solange er im Format PEM extrahiert wurde. Sie wissen wahrscheinlich bereits, dass Sie auch einen entsprechenden privaten Schlüssel benötigen (auch in PEM ), um ihn für die ssh-public-key-Authentifizierung zu verwenden.

0
sirgeorge