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?
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
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
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
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
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.