OpenSSL
Comment convertir des fichiers P12 ou PFX ?
Les fichiers portant l'extension .p12 ou .pfx (indifférement), sont des fichiers binaires respectant la norme PKCS#12. Ils contiennent un certificat et sa clef privée, et éventuellement d'autres certificats intermédiaires. Les fichiers PFX ( .p12 ou .pfx ) se retrouvent surtout sur les systèmes Windows.
Je vous propose de découvrir la gestion de ces fichiers avec l'outil openssl sous Gnu/Linux.
Convertir des fichiers PEM en PFX
Pour créer un fichier PFX, j'ai besoin:
- d'une clef privée ;
- d'un certificat x509 au format PEM (associé à la clef privée ci-dessus) ;
- éventuellement d'un autre certificat au format PEM (par exemple le certificat de la CA), mais ce n'est pas obligatoire.
Puis j'utilise la commande suivante :
openssl pkcs12 -export -out Store.pfx \
-passout pass:mdpPFX \
-inkey Serveur.key \
-passin pass:mdpKEY \
-in Serveur.crt \
-certfile CAcert.crt
Explication de la commande :
openssl pkcs12
: la commande pour utiliser les outils liés à PKCS#12 dans openssl ;-export
: crée un fichier PKCS12 ;-out Store.pfx
: le fichier créé se nommera Store.pfx ;-inkey Serveur.key
: spécifie l'emplacement de la clef privée Serveur.key ;-in Serveur.crt
: spécifie l'emplacement du certificat Serveur.crt associé à la clef privée Serveur.key ;-certfile CAcert.crt
: (optionnel) spécifie l'emplacement d'un autre certificat (ici le certificat de la CA CAcert.crt) ;-passin pass:mdpKEY
: (optionnel) spécifie le mot de passe mdpKEY du fichier Serveur.key ;-passout pass:mdpPFX
: (optionnel) spécifie le mot de passe mdpPFX du nouveau fichier Store.pfx. Annule le mot de passe de la clef privée Serveur.key.
Dans le cas où je souhaiterais ajouter plus d'un certificat intermédiaire, il me faudrait créer un unique fichier contenant tous les certificats. D'abord en m'assurant que tous les certificats sont au format PEM. Ensuite en copiant les certificats dans un seul et même fichier. Par exemple sous linux :
touch autres_certificats.crt
cat cert1.crt cert2.crt cert3.crt > autres_certificats.crt
openssl pkcs12 -export -out Store.pfx \
-passout pass:mdpPFX \
-inkey Serveur.key \
-passin pass:mdpKEY \
-in Serveur.crt \
-certfile autres_certificats.crt
Convertir un fichier PFX en fichier PEM
Si je veux récupérer un fichier contenant à la fois les certificats et la clef privée :
openssl pkcs12 -in Store.pfx -out Store.pem -nodes
Info: Sans l'option -nodes
, le prompt demande de créer un mot de passe pour la clef privée.
Si je veux un fichier contenant seulement la clef privée :
openssl pkcs12 -in Store.pfx -out private_key.key -nodes -nocerts
Si je veux un fichier contenant seulement les certificats :
openssl pkcs12 -in Store.pfx -out certificats.pem -nodes -nokeys
Si je veux un fichier contenant seulement les certificats clients :
openssl pkcs12 -in Store.pfx -out certificats_clients.pem -nodes -nokeys -clcerts
Si je veux un fichier contenant seulement les certificats de ca :
openssl pkcs12 -in Store.pfx -out certificats_ca.pem -nodes -nokeys -cacerts