OpenSSL est la boîte à outils de référence pour la gestion des certificats SSL/TLS, le chiffrement et les opérations cryptographiques. Disponible sur Linux, Windows et macOS.
🔍 Vérification de certificats
📌 Action 🧠 Commande 📜 Afficher un certificat PEM openssl x509 -in cert.pem -text -noout📜 Afficher un certificat DER openssl x509 -in cert.cer -inform DER -text -noout🔑 Vérifier une clé privée openssl rsa -in key.pem -check📝 Afficher un CSR openssl req -in request.csr -text -noout📦 Vérifier un PFX openssl pkcs12 -in cert.pfx -info -noout📅 Dates de validité openssl x509 -in cert.pem -noout -dates🏷️ Voir le sujet openssl x509 -in cert.pem -noout -subject🏢 Voir l’émetteur openssl x509 -in cert.pem -noout -issuer🔢 Numéro de série openssl x509 -in cert.pem -noout -serial
PEM ↔ DER
# PEM vers DER
openssl x509 -in cert.pem -outform DER -out cert.der
# DER vers PEM
openssl x509 -in cert.der -inform DER -out cert.pem
PEM ↔ PFX/P12
# PEM vers PFX (certificat + clé + chaîne)
openssl pkcs12 -export -out cert.pfx \
-inkey private.key \
-in cert.pem \
-certfile chain.pem
# PFX vers PEM (tout extraire)
openssl pkcs12 -in cert.pfx -out all.pem -nodes
# PFX vers PEM (certificat seul)
openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.pem
# PFX vers PEM (clé seule)
openssl pkcs12 -in cert.pfx -nocerts -nodes -out key.pem
Clés RSA
# Clé chiffrée vers non chiffrée
openssl rsa -in encrypted.key -out decrypted.key
# Clé non chiffrée vers chiffrée
openssl rsa -in key.pem -aes256 -out encrypted.key
🔑 Génération de clés et CSR
📌 Action 🧠 Commande 🔑 Générer clé RSA 2048 openssl genrsa -out key.pem 2048🔑 Générer clé RSA 4096 openssl genrsa -out key.pem 4096🔐 Clé RSA chiffrée openssl genrsa -aes256 -out key.pem 2048📝 Générer CSR openssl req -new -key key.pem -out request.csr⚡ Clé + CSR en une commande openssl req -new -newkey rsa:2048 -nodes -keyout key.pem -out request.csr
CSR avec SAN (Subject Alternative Names)
# Créer un fichier de config san.cnf
cat > san.cnf << EOF
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
CN = example.com
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = example.com
DNS.2 = www.example.com
DNS.3 = api.example.com
EOF
# Générer le CSR avec SAN
openssl req -new -key key.pem -out request.csr -config san.cnf
📜 Certificats auto-signés
# Certificat auto-signé simple (1 an)
openssl req -x509 -nodes -days 365 \
-newkey rsa:2048 \
-keyout key.pem \
-out cert.pem \
-subj " /CN=example.com "
# Certificat auto-signé avec SAN
openssl req -x509 -nodes -days 365 \
-newkey rsa:2048 \
-keyout key.pem \
-out cert.pem \
-config san.cnf \
-extensions v3_req
🌐 Debug connexions SSL/TLS
📌 Action 🧠 Commande 🔗 Tester connexion HTTPS openssl s_client -connect example.com:443📜 Afficher le certificat openssl s_client -connect example.com:443 -showcerts🔒 Forcer TLS 1.2 openssl s_client -connect example.com:443 -tls1_2🔒 Forcer TLS 1.3 openssl s_client -connect example.com:443 -tls1_3📧 Test SMTP STARTTLS openssl s_client -connect mail.example.com:587 -starttls smtp📧 Test IMAP STARTTLS openssl s_client -connect mail.example.com:143 -starttls imap🗄️ Test MySQL/MariaDB SSL openssl s_client -connect db.example.com:3306 -starttls mysql
Récupérer le certificat d’un serveur
# Télécharger le certificat
echo | openssl s_client -connect example.com:443 2> /dev/null | \
openssl x509 -out server-cert.pem
# Télécharger toute la chaîne
echo | openssl s_client -connect example.com:443 -showcerts 2> /dev/null | \
sed -n ' /-----BEGIN/,/-----END/p ' > chain.pem
✅ Vérification de correspondance
# Vérifier que clé et certificat correspondent
openssl x509 -noout -modulus -in cert.pem | openssl md5
openssl rsa -noout -modulus -in key.pem | openssl md5
# Les deux hash doivent être identiques
# Vérifier que CSR et clé correspondent
openssl req -noout -modulus -in request.csr | openssl md5
openssl rsa -noout -modulus -in key.pem | openssl md5
🔐 Chiffrement de fichiers
📌 Action 🧠 Commande 🔒 Chiffrer un fichier openssl enc -aes-256-cbc -salt -in file.txt -out file.enc🔓 Déchiffrer un fichier openssl enc -d -aes-256-cbc -in file.enc -out file.txt🔒 Chiffrer avec pbkdf2 openssl enc -aes-256-cbc -salt -pbkdf2 -in file.txt -out file.enc
📊 Hash et signatures
📌 Action 🧠 Commande #️⃣ Hash MD5 openssl dgst -md5 file.txt#️⃣ Hash SHA256 openssl dgst -sha256 file.txt#️⃣ Hash SHA512 openssl dgst -sha512 file.txt✍️ Signer un fichier openssl dgst -sha256 -sign key.pem -out sig.bin file.txt✅ Vérifier signature openssl dgst -sha256 -verify pubkey.pem -signature sig.bin file.txt
🏗️ Créer une CA privée
1. Créer la CA racine
# Générer la clé de la CA
openssl genrsa -aes256 -out ca-key.pem 4096
# Créer le certificat racine (10 ans)
openssl req -new -x509 -days 3650 \
-key ca-key.pem \
-out ca-cert.pem \
-subj " /CN=My Private CA/O=My Company "
2. Signer un certificat avec la CA
# Créer un CSR pour le serveur
openssl req -new -key server-key.pem -out server.csr
# Signer avec la CA (1 an)
openssl x509 -req -days 365 \
-in server.csr \
-CA ca-cert.pem \
-CAkey ca-key.pem \
-CAcreateserial \
-out server-cert.pem
🔧 Commandes utiles
📌 Action 🧠 Commande 📋 Version OpenSSL openssl version📋 Version détaillée openssl version -a🔐 Liste des ciphers openssl ciphers -v🎲 Générer mot de passe openssl rand -base64 32🎲 Générer hex aléatoire openssl rand -hex 16📝 Encoder en base64 openssl base64 -in file.bin -out file.b64📝 Décoder base64 openssl base64 -d -in file.b64 -out file.bin
🛠️ Dépannage courant
🆘 Problème 🧠 Solution ❌ “unable to load certificate” Vérifier le format (PEM vs DER), essayer -inform DER ❌ “key values mismatch” La clé et le certificat ne correspondent pas ❌ “certificate verify failed” Certificat expiré ou chaîne incomplète ❌ “wrong version number” Mauvais port ou protocole (HTTP au lieu de HTTPS) ❌ “no peer certificate” Le serveur ne présente pas de certificat ❌ “self signed certificate” CA non reconnue, ajouter au trust store