Je souhaite extraire les clés 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 dans lequel je mets . Ssh/registered_key, respectivement quelque part du côté client.
À l'avenir, je souhaite utiliser les clés d'un conteneur PKCS # 12. Je dois donc extraire d'abord la clé publique de PKCS # 12, puis les placer dans le fichier . Ssh/registered_keys - . Y a-t-il une chance que cela fonctionne via openssl? Les clés de PKCS # 12 sont-elles compatibles avec l'authentification ssh-public-key?
Vous pouvez utiliser les commandes suivantes pour extraire la clé publique/privée d'un conteneur PKCS # 12:
Clé privée PKCS # 1
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 prêts à l'emploi. Comme d'autres l'ont suggéré, vous devez extraire la clé privée au format PEM, qui vous permet de quitter OpenSSL vers OpenSSH. Les 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.8y, 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 un 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 sûr non plus, vous devez donc supprimer la dernière commande de l’historique ou simplement vous assurer qu’elle n’y parvient pas. Différents coquillages ont différentes manières. Vous pouvez préfixer votre commande avec un espace pour l'empêcher d'être enregistrée dans l'historique dans Bash et de nombreux autres shells. Voici également comment supprimer la commande de l'historique dans Bash:
history -d $(history | tail -n 2 | awk 'NR == 1 { print $1 }')
Sinon, vous pouvez utiliser un moyen différent pour passer un mot de passe de clé privée à OpenSSL - consulter documentation OpenSSL pour les arguments de phrase secrète .
Ensuite, créez une clé publique OpenSSH pouvant être ajoutée au fichier allowed_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 le PEM du P12 et le fichier Edit et le pem 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 dans un fichier txt```
openssl pkcs12 -in MyRootCA.p12 -out keys_out.txt
décrypter privateKey
openssl rsa -in encryptedPrivateKey.key [-outform PEM] -out decryptedPrivateKey.key
Mise à jour: J'ai remarqué que ma réponse n'était qu'un duplicata médiocre d'une question bien expliquée sur https://unix.stackexchange.com/ ... par BryKKan
En voici un extrait:
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>
La réponse acceptée est la bonne commande. Je souhaite simplement ajouter une chose supplémentaire lors de l'extraction de la clé si vous laissez le mot de passe PEM vide ("Entrez la phrase secrète PEM:"). être extrait. Pour obtenir la clé complète, vous devez spécifier un mot de passe PEM lors de l'exécution de la commande suivante.
Veuillez noter qu'en ce qui concerne le mot de passe d'importation, vous pouvez spécifier le mot de passe actuel pour "Entrer le mot de passe d'importation:" ou laisser ce mot de passe vide.
openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem
Pour autant que je sache, PKCS # 12 n'est qu'un magasin de certificats/clés publiques/privées. Si vous avez extrait une clé publique d'un 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) pour pouvoir l'utiliser pour l'authentification par ssh-public-key.