Les formats
- PFX / P12 (PKCS#12) : un conteneur protégé par mot de passe avec certificat, intermédiaires et clé privée. Standard sous Windows, IIS, Exchange et Azure.
- PEM : des fichiers texte avec des blocs comme
-----BEGIN CERTIFICATE-----. Standard sous Linux, nginx, Apache et HAProxy. Les extensions.pem,.crt,.ceret.keysont souvent du PEM. - DER : la même chose que PEM, mais en binaire. Sous Windows,
.cerest souvent du DER. - P7B (PKCS#7) : uniquement des certificats, sans clé, souvent fourni par l’AC comme chaîne.
Sans OpenSSL : convertir dans le navigateur
Dépose le fichier PFX dans le convertisseur de certificats et saisis le mot de passe. Certificat, chaîne et clé se téléchargent alors séparément ou en bundle. Dans l’autre sens, le convertisseur prend certificat et clé en PEM et crée un PFX, en complétant automatiquement les intermédiaires manquants. Tout se passe dans le navigateur.
PFX → PEM avec OpenSSL
# tout dans un fichier (clé non chiffrée) openssl pkcs12 -in fichier.pfx -out tout.pem -nodes # uniquement le certificat serveur openssl pkcs12 -in fichier.pfx -clcerts -nokeys -out server.crt # uniquement les intermédiaires openssl pkcs12 -in fichier.pfx -cacerts -nokeys -out chain.crt # uniquement la clé privée openssl pkcs12 -in fichier.pfx -nocerts -nodes -out server.key
Erreur « unsupported » avec OpenSSL 3
error:0308010C:digital envelope routines::unsupported
Les anciens fichiers PFX sont chiffrés en RC2 ou 3DES. OpenSSL 3 ne charge plus ces algorithmes qu’en mode legacy. La solution est l’option -legacy :
openssl pkcs12 -legacy -in ancien.pfx -out tout.pem -nodes
PEM → PFX avec OpenSSL
openssl pkcs12 -export -out server.pfx \ -inkey server.key -in server.crt -certfile chain.crt
Windows prétend que le mot de passe est incorrect
OpenSSL 3 chiffre les PFX en AES-256 par défaut. Windows Server 2016 et les versions antérieures ne savent pas les ouvrir et signalent un mot de passe incorrect (« The password you entered is incorrect ») alors qu’il est juste. Les fichiers créés en 3DES fonctionnent partout :
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt -certfile chain.crt \ -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -macalg sha1
Le convertisseur de certificats crée d’emblée des PFX en 3DES et lit aussi bien les fichiers AES que les anciens fichiers RC2.
Quel format pour quel serveur ?
- nginx : PEM :
ssl_certificateavec certificat serveur et chaîne dans un fichier,ssl_certificate_keyavec la clé. - Apache 2.4.8+ : PEM :
SSLCertificateFileavec certificat et chaîne,SSLCertificateKeyFileavec la clé. - HAProxy : un seul fichier PEM avec certificat, chaîne et clé.
- IIS, Exchange, services Windows : PFX.
- Tomcat et Java 9+ : PKCS#12 directement comme keystore (
keystoreType="PKCS12").
FAQ
J’ai oublié le mot de passe du PFX. Que faire ?
Un PFX ne s’ouvre pas sans mot de passe. Si le certificat est encore installé sur un serveur Windows et que la clé est exportable, réexporte-le là-bas avec un nouveau mot de passe. Sinon, seule une réémission est possible.
Pourquoi les intermédiaires manquent-ils après conversion ?
Certains PFX ne contiennent que le certificat serveur. Le convertisseur récupère automatiquement les intermédiaires manquants via l’entrée AIA du certificat.
.cer et .crt, c’est pareil ?
Ce ne sont que des extensions pour certificats. Le contenu peut être PEM (texte) ou DER (binaire). Ouvre le fichier dans un éditeur de texte : s’il commence par -----BEGIN CERTIFICATE-----, c’est du PEM.