Extraire la clé publique / privée du fichier PKCS12 pour une utilisation ultérieure dans L'authentification SSH-PK

Je veux extraire la clé publique et privée de mon fichier PKCS # 12 pour une utilisation ultérieure dans SSH-Public-Key-Authentication.

En ce moment, je génère des clés via ssh-keygen que je mets dans .ssh / authorized_key , respectivement quelque part du côté client.

À l'avenir, je veux utiliser les clés d'un conteneur PKCS#12, donc je dois d'abord extraire la clé publique de PKCS#12, puis les mettre dans le .ssh/authorized_keys-fichier. Est-il possible de le faire fonctionner via openssl? Les clés de PKCS # 12 sont-elles compatibles pour l'authentification par clé publique ssh?

159
demandé sur Cœur 2012-02-29 14:53:05

5 réponses

Vous pouvez utiliser les commandes suivantes pour extraire la clé publique / privée d'un conteneur PKCS # 12:

  • PKCS # 1 Clé privée

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

    openssl pkcs12 -in yourP12File.pfx -clcerts -nokeys -out publicCert.pem
    
239
répondu Nilesh 2017-10-27 02:23:26

Ceci est possible avec un peu de conversion de format.

Pour extraire la clé privée dans un format openssh peut utiliser:

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

Pour convertir la clé privée en Clé publique:

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

Pour extraire la clé publique dans un format openssh peut utiliser:

openssl pkcs12 -in pkcs12.pfx -clcerts -nokeys | openssl x509 -pubkey -noout | ssh-keygen -f /dev/stdin -i -m PKCS8
72
répondu ryanc 2012-03-15 16:28:08

OpenSSH ne peut pas utiliser les fichiers PKCS # 12 hors de la boîte. Comme d'autres l'ont suggéré, vous devez extraire la clé privée au format PEM qui vous amène du pays D'OpenSSL à OpenSSH. D'autres solutions mentionnées ici ne fonctionnent pas pour moi. J'utilise OS X 10.9 Mavericks (10.9.3 pour le moment) avec des utilitaires " préemballés "(OpenSSL 0.9.8 y, OpenSSH 6. 2p2).

Tout d'abord, extrayez une clé privée au format PEM qui sera utilisée directement par OpenSSH:

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

Je suggère fortement de chiffrer la clé privée avec mot de passe:

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

Évidemment, écrire un mot de passe en texte brut sur la ligne de commande n'est pas non plus sûr, donc vous devriez supprimer la dernière commande de l'historique ou simplement la faire ne pas y arriver. Différentes coquilles ont des manières différentes. Vous pouvez préfixer votre commande avec de l'espace pour l'empêcher d'être enregistrée dans l'historique dans Bash et de nombreux autres shells. Voici aussi comment supprimer la commande de l'historique dans Bash:

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

Vous pouvez également utiliser une méthode différente pour passer un mot de passe de clé privée pour OpenSSL-consultez la documentation OpenSSL pour les arguments de phrase de passe .

Ensuite, créez une clé publique OpenSSH qui peut être ajoutée au fichier authorized_keys:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
10
répondu frzng 2018-06-21 13:22:18

Solution 1:

Extrait P12 de jks

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

Extraire PEM de P12 et modifier le fichier et pem à partir du fichier crt

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

Extraire la clé de jks

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

Solution 2:

Extraire PEM et encryptedPrivateKey au fichier txt``

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

Décrypter privateKey

openssl rsa -in encryptedPrivateKey.key [-outform PEM] -out decryptedPrivateKey.key
3
répondu Ali Alimohammadi 2018-06-21 16:45:39

Pour autant que je sache PKCS#12 est juste un magasin de clés certificate/public/private. Si vous avez extrait une clé publique du fichier PKCS#12, OpenSSH devrait pouvoir l'utiliser tant qu'elle a été extraite au format PEM. Vous savez probablement déjà que vous avez également besoin d'une clé privée correspondante (également dans PEM) afin de l'utiliser pour ssh-clé publique d'authentification.

0
répondu sirgeorge 2017-10-12 08:29:19