Dans les articles précédents de notre série sur le protocole TLS, nous avons exploré les fondements théoriques de la sécurité des connexions internet. Maintenant, il est temps de passer à la pratique avec OpenSSL, l’outil de référence pour la manipulation des certificats et des clés cryptographiques.
Les formats de certificats
Avant de plonger dans les commandes OpenSSL, il est important de comprendre les différents formats dans lesquels les certificats et les clés peuvent être stockés. Chaque format a ses spécificités et ses cas d’usage.
PEM (Privacy Enhanced Mail)
C’est le format le plus répandu pour les certificats, les clés privées et les requêtes de certificats.
Caractéristiques :
- Format texte encodé en Base64
- Facilement reconnaissable par ses délimiteurs
-----BEGIN CERTIFICATE-----
et-----END CERTIFICATE-----
- Lisible et modifiable avec un simple éditeur de texte
- Facile à partager par email ou à inclure dans des fichiers de configuration
- Extensions courantes :
.pem
,.crt
,.cer
,.key
(pour les clés privées)
Exemple :
-----BEGIN CERTIFICATE-----
MIIDhTCCAm2gAwIBAgIJALJ7VcOA7KCTMA0GCSqGSIb3DQEBCwUAMFkxCzAJBgNV
BAYTAkZSMQ8wDQYDVQQIDAZGcmFuY2UxDjAMBgNVBAcMBVBhcmlzMQ8wDQYDVQQK
...
xBGSF4ejDpMjA2QXQL2/H7WQpVDVYNsZbPj5SPSEyS8CAwEAAaNTMFEwHQYDVR0O
BBYEFN8c4J3JLNd2j1dXKCRgAX+QNVu5MB8GA1UdIwQYMBaAFN8c4J3JLNd2j1dX
KCRgAX+QNVu5MA8GA1UdEwEB/wQFMAMBAf8=
-----END CERTIFICATE-----
DER (Distinguished Encoding Rules)
Un format binaire pour les certificats et les clés.
Caractéristiques :
- Format binaire (non lisible directement)
- Plus compact que PEM
- Souvent utilisé sur les plateformes Windows
- Extensions courantes :
.der
,.cer
(sous Windows)
PKCS#7 / P7B
Format qui peut contenir des certificats et des chaînes de certificats, mais pas les clés privées.
Caractéristiques :
- Peut contenir plusieurs certificats (utile pour les chaînes de certificats)
- Peut être en format binaire ou encodé en Base64
- Extensions courantes :
.p7b
,.p7c
- Souvent utilisé sur les plateformes Windows et Java
PKCS#12 / PFX
Un format d’archive qui peut contenir à la fois des certificats et des clés privées, protégés par un mot de passe.
Caractéristiques :
- Format binaire protégé par mot de passe
- Peut contenir à la fois les certificats et les clés privées
- Facile à importer/exporter dans de nombreux systèmes
- Extensions courantes :
.pfx
,.p12
- Très utilisé pour le transfert complet d’identité numérique
Manipulation des certificats avec OpenSSL
OpenSSL est un outil en ligne de commande puissant qui offre une vaste gamme de fonctionnalités pour manipuler les certificats et les clés cryptographiques. Voici les commandes les plus utiles pour la gestion quotidienne des certificats TLS.
Installation d’OpenSSL
Avant de commencer, assurez-vous d’avoir OpenSSL installé sur votre système :
- Sur Linux (Debian/Ubuntu) :
sudo apt-get install openssl
- Sur macOS (avec Homebrew) :
brew install openssl
- Sur Windows :
Téléchargez et installez OpenSSL depuis cette page ou utilisez Git Bash qui inclut OpenSSL.
Visualiser le contenu d’un certificat
Pour afficher les informations d’un certificat au format PEM :
openssl x509 -in certificat.pem -text -noout
Pour un certificat au format DER :
openssl x509 -in certificat.der -inform DER -text -noout
Exemple concret : Vous avez reçu un certificat de votre autorité de certification et vous souhaitez vérifier ses détails (validité, nom de domaine, émetteur, etc.) avant de l’installer sur votre serveur.
$ openssl x509 -in example.com.crt -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 258059008313593881613024940475667098490
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, O=Let's Encrypt, CN=R3
Validity
Not Before: May 1 12:34:56 2025 GMT
Not After : Jul 30 12:34:56 2025 GMT
Subject: CN=example.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
...
Convertir entre différents formats
La conversion entre formats est une tâche courante, surtout lorsque vous travaillez avec différents systèmes.
De PEM vers DER :
openssl x509 -in certificat.pem -outform DER -out certificat.der
De DER vers PEM :
openssl x509 -in certificat.der -inform DER -outform PEM -out certificat.pem
De PEM vers PKCS#12 (incluant la clé privée) :
openssl pkcs12 -export -out certificat.pfx -inkey cle-privee.key -in certificat.pem -certfile ca-chain.pem
Exemple pratique : Vous avez obtenu votre certificat au format PEM, mais vous devez l’installer sur un serveur Windows qui préfère le format PKCS#12.
$ openssl pkcs12 -export -out monsite.pfx -inkey monsite.key -in monsite.crt -certfile ca-chain.crt
Enter Export Password: *******
Verifying - Enter Export Password: *******
Extraire des éléments d’un fichier PKCS#12
Extraire le certificat :
openssl pkcs12 -in certificat.pfx -nokeys -out certificat.pem
Extraire la clé privée :
openssl pkcs12 -in certificat.pfx -nocerts -nodes -out cle-privee.key
Cas d’usage : Vous avez une sauvegarde de votre identité numérique en format PKCS#12 et vous devez extraire la clé privée pour l’utiliser avec un nouveau serveur web.
$ openssl pkcs12 -in sauvegarde.pfx -nocerts -nodes -out cle-serveur.key
Enter Import Password: *******
Créer et gérer des clés privées
Générer une nouvelle clé privée RSA :
openssl genrsa -out cle-privee.key 2048
Pour une sécurité accrue, utilisez 4096 bits :
openssl genrsa -out cle-privee.key 4096
Générer une clé privée avec une passphrase (mot de passe) :
openssl genrsa -des3 -out cle-privee.key 2048
Supprimer la passphrase d’une clé privée :
openssl rsa -in cle-protegee.key -out cle-non-protegee.key
Exemple pratique : Vous configurez un nouveau serveur web et souhaitez générer une clé privée sécurisée.
$ openssl genrsa -out monserveur.key 4096
Generating RSA private key, 4096 bit long modulus
.....................................................................++
....................................++
e is 65537 (0x10001)
Vérifier une clé privée et un certificat
Pour vérifier que la clé privée et le certificat correspondent :
openssl pkey -in cle-privee.key -pubout -outform pem | sha256sum
openssl x509 -in certificat.pem -pubkey -noout -outform pem | sha256sum
Si les deux commandes produisent la même empreinte (hash), alors la clé privée et le certificat correspondent.
Scénario réel : Vous avez plusieurs clés privées et certificats, et vous devez identifier quelle clé correspond à quel certificat.
$ openssl pkey -in site.key -pubout -outform pem | sha256sum
a1b2c3d4e5f6... -
$ openssl x509 -in site.crt -pubkey -noout -outform pem | sha256sum
a1b2c3d4e5f6... -
# Les hachages identiques confirment que la clé et le certificat correspondent
Vérifier la chaîne de certificats
Pour vérifier qu’un certificat est correctement signé par une autorité de certification :
openssl verify -CAfile ca-chain.pem certificat.pem
Application pratique : Vous avez reçu un certificat d’une autorité de certification et vous souhaitez vérifier sa validité avant de l’installer.
$ openssl verify -CAfile ca-bundle.pem mon-certificat.pem
mon-certificat.pem: OK
Générer une demande de signature de certificat (CSR)
Une CSR (Certificate Signing Request) est nécessaire pour obtenir un certificat signé par une autorité de certification.
Générer une CSR à partir d’une nouvelle clé privée :
openssl req -new -newkey rsa:2048 -nodes -keyout cle-privee.key -out demande.csr
Générer une CSR à partir d’une clé privée existante :
openssl req -new -key cle-privee.key -out demande.csr
Exemple concret : Vous souhaitez obtenir un certificat TLS pour votre nouveau site web. Vous générez d’abord une CSR que vous soumettrez à une autorité de certification.
$ openssl req -new -key monsite.key -out monsite.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
...
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:Ile-de-France
Locality Name (eg, city) []:Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ma Société
...
Common Name (e.g. server FQDN or YOUR name) []:www.monsite.fr
Email Address []:admin@monsite.fr
...
Créer un certificat auto-signé
Pour un environnement de test ou de développement, un certificat auto-signé peut être suffisant.
openssl req -x509 -newkey rsa:4096 -keyout cle-privee.key -out certificat.pem -days 365
Pour créer un certificat auto-signé à partir d’une clé existante :
openssl req -x509 -key cle-privee.key -out certificat.pem -days 365
Cas d’usage : Vous développez une application web et avez besoin d’HTTPS pour tester certaines fonctionnalités.
$ openssl req -x509 -newkey rsa:4096 -keyout dev-key.pem -out dev-cert.pem -days 365 -nodes
Generating a RSA private key
...............................++++
...++++
writing new private key to 'dev-key.pem'
-----
Country Name (2 letter code) [AU]:FR
...
Common Name (e.g. server FQDN or YOUR name) []:localhost
...
Examiner une demande de signature de certificat (CSR)
Pour vérifier le contenu d’une CSR :
openssl req -in demande.csr -text -noout
Exemple pratique : Avant de soumettre votre CSR à une autorité de certification, vous souhaitez vérifier que toutes les informations sont correctes.
$ openssl req -in monsite.csr -text -noout
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=FR, ST=Ile-de-France, L=Paris, O=Ma Société, CN=www.monsite.fr
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
...
Vérifier et tester un site web TLS
Pour tester la connexion à un site web sécurisé :
openssl s_client -connect www.example.com:443 -servername www.example.com
Pour vérifier uniquement les certificats sans établir de connexion complète :
openssl s_client -connect www.example.com:443 -servername www.example.com -showcerts
Exemple utile : Vous souhaitez vérifier la configuration TLS d’un site web ou diagnostiquer des problèmes de certificat.
$ openssl s_client -connect google.com:443 -servername google.com
CONNECTED(00000003)
depth=2 C = US, O = Google Trust Services LLC, CN = GTS Root R1
verify return:1
depth=1 C = US, O = Google Trust Services LLC, CN = GTS CA 1C3
verify return:1
depth=0 CN = *.google.com
verify return:1
---
Certificate chain
0 s:CN = *.google.com
i:C = US, O = Google Trust Services LLC, CN = GTS CA 1C3
1 s:C = US, O = Google Trust Services LLC, CN = GTS CA 1C3
i:C = US, O = Google Trust Services LLC, CN = GTS Root R1
2 s:C = US, O = Google Trust Services LLC, CN = GTS Root R1
i:C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
---
...
Bonnes pratiques pour la gestion des certificats
La gestion des certificats TLS va au-delà des simples commandes OpenSSL. Voici quelques bonnes pratiques à adopter :
Stockage sécurisé des clés privées
- Restreindre les permissions : Utilisez
chmod 600
pour limiter l’accès à votre clé privée.chmod 600 cle-privee.key
- Utiliser un stockage sécurisé : Sur les systèmes de production, envisagez d’utiliser un gestionnaire de secrets comme HashiCorp Vault ou AWS Secrets Manager.
- Protéger par mot de passe : Lorsque c’est possible, protégez vos clés privées avec une passphrase.
Automatisation du renouvellement des certificats
- Utiliser des scripts : Créez des scripts pour automatiser le processus de renouvellement.
- Adopter certbot : Pour Let’s Encrypt, utilisez certbot qui gère automatiquement le renouvellement.
certbot renew --dry-run
- Mettre en place des rappels : Configurez des alertes quelques semaines avant l’expiration de vos certificats.
Surveillance de la validité des certificats
- Vérifier régulièrement : Mettez en place des vérifications automatiques de la validité de vos certificats.
- Utiliser des outils spécialisés : Des services comme SSL Labs ou des outils comme SSLyze peuvent vous aider à vérifier la configuration de vos certificats.
- Intégrer dans votre système de monitoring : Ajoutez des vérifications de certificats à votre système de monitoring existant.
Gestion des révocations
- Vérifier les CRL : Configurez vos serveurs pour vérifier les listes de révocation de certificats.
- Activer OCSP Stapling : Cette technique améliore les performances et la confidentialité des vérifications de révocation.
# Configuration dans Apache SSLUseStapling on SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
Cas d’usage avancés
Créer une autorité de certification interne
Pour les environnements de test ou les réseaux internes, vous pouvez créer votre propre autorité de certification.
- Créer la clé privée de la CA :
openssl genrsa -out ca.key 4096
- Créer le certificat auto-signé de la CA :
openssl req -x509 -new -nodes -key ca.key -sha256 -days 1825 -out ca.crt
- Signer un certificat avec votre CA :
openssl x509 -req -in demande.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out certificat.crt -days 365 -sha256
Créer des certificats avec des extensions spécifiques
Les extensions X.509 permettent d’ajouter des informations supplémentaires aux certificats.
- Créer un fichier de configuration pour les extensions :
# Extensions pour un certificat serveur [ req ] req_extensions = v3_req [ v3_req ] basicConstraints = CA:FALSE keyUsage = digitalSignature, keyEncipherment subjectAltName = @alt_names [ alt_names ] DNS.1 = www.example.com DNS.2 = example.com DNS.3 = admin.example.com
- Utiliser le fichier de configuration pour générer une CSR :
openssl req -new -key cle-privee.key -out demande.csr -config config.cnf
Implémenter la rotation des clés
La rotation régulière des clés est une bonne pratique de sécurité.
- Générer une nouvelle clé privée et CSR :
openssl genrsa -out nouvelle-cle.key 4096 openssl req -new -key nouvelle-cle.key -out nouvelle-demande.csr
- Obtenir un nouveau certificat de l’autorité de certification
- Configurer le serveur pour utiliser les nouveaux certificat et clé :
# Configuration Apache SSLCertificateFile /chemin/vers/nouveau-certificat.crt SSLCertificateKeyFile /chemin/vers/nouvelle-cle.key
- Redémarrer le service avec précaution pour minimiser les interruptions
Ressources pour aller plus loin
Documentation et tutoriels
Outils de diagnostic
- SSL Labs Server Test
- SSL Labs Client Test
- SSLyze – Outil d’analyse de configuration TLS
Autorités de certification
- Let’s Encrypt – Autorité de certification gratuite et automatisée
- Certbot – Client ACME pour automatiser l’obtention de certificats Let’s Encrypt
- Buypass – Alternative à Let’s Encrypt proposant des certificats gratuits
Conclusion
La maîtrise des certificats TLS avec OpenSSL est une compétence essentielle pour tout administrateur système ou développeur travaillant avec des applications web sécurisées. Les commandes et techniques présentées dans cet article vous donneront les bases nécessaires pour gérer efficacement vos certificats.
N’oubliez pas que la sécurité est un processus continu. Restez informé des dernières bonnes pratiques et vulnérabilités potentielles, et mettez régulièrement à jour vos configurations et certificats.
En appliquant ces connaissances, vous contribuerez à rendre internet plus sûr, une connexion TLS à la fois !