Dans le cadre de mon stage en entreprise, j’ai été amené à déployer des services web, des services accessibles depuis un navigateur comme Firefox ou Chrome. C’est donc tout naturellement que j’ai souhaité passer ces services en HTTPS pour assurer la sécurité des échanges et donner confiance aux utilisateurs.

J’ai donc demandé des certificats aux responsables dans mon entreprise et on m’a fourni un unique fichier au format PFX.

Selon sslmarket.fr :

Un fichier PFX (PKCS#12) est un fichier spécialement formaté qui inclut un certificat SSL, une clé privée et les certificats intermédiaires (qui garantissent la fiabilité du certificat). Vous pouvez le considérer comme une archive contenant tout ce dont vous avez besoin pour l’installation du certificat.

J’ai donc cherché comment convertir cet unique fichier créé par un serveur Windows de l’entreprise en un certificat et une clé utilisable par mon serveur web Nginx. Et j’ai trouvé ce tutoriel (en anglais) : https://xy2z.io/posts/2020-pfx-certificates-nginx-apache2/

Le voici traduit en français :

Configurer SSL en utilisant un fichier .PFX pour nginx/apache2

Intro

Un fichier pfx est une archive de certificat protégée par un mot de passe qui contient votre certificat et la clé privée.

Les extensions de certificat peuvent prêter à confusion car il en existe un grand nombre (.crt, .cert, .key, .pem, .csr, etc.). Personnellement, j’utilise les mêmes extensions (.crt et .key) que la documentation https de nginx.

  • domain.tld.key : Le fichier de clé privée RSA décryptée pour le certificat. (ssl_certificate_key)
  • domain.tld.crt : Le fichier de certificat pour le domaine (sans)
  • bundle.crt : Le fichier de certificat pour l’émetteur.
  • domain.tld.chained.crt : Le fichier concaténé qui se compose de domain.tld.crt et bundle.crt (ssl_certificate)

Récupérer le fichier .key

Extraire la clé chiffrée en utilisant :

$ openssl pkcs12 -in certfile.pfx -nocerts -out domain.tld.encrypted.key

Déchiffrer la clé chiffrée en utilisant :

$ openssl rsa -in domain.tld.encrypted.key -out domain.tld.key

Supprimer le fichier domain.tld.encrypted.key car nous n’en aurons pas besoin.

Obtenez le fichier .crt

Obtenez votre certificat de domaine en utilisant :

$ openssl pkcs12 -in certfile.pfx -clcerts -nokeys -out domain.tld.crt

Obtenez votre certificat de CA en utilisant :

$ openssl pkcs12 -in certfile.pfx -cacerts -out bundle.crt

Concaténer les 2 fichiers .crt en un .crt chaîné :

$ cat domain.tld.crt bundle.crt > domain.tld.chained.crt

Supprimez les fichiers bundle.crt et domain.tld.crt.