skip to content

Recherche

Syspirit
FR

OpenSSL

Gestion des certificats SSL/TLS avec OpenSSL - génération, conversion, vérification et debug !

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 PEMopenssl x509 -in cert.pem -text -noout
📜 Afficher un certificat DERopenssl x509 -in cert.cer -inform DER -text -noout
🔑 Vérifier une clé privéeopenssl rsa -in key.pem -check
📝 Afficher un CSRopenssl req -in request.csr -text -noout
📦 Vérifier un PFXopenssl pkcs12 -in cert.pfx -info -noout
📅 Dates de validitéopenssl x509 -in cert.pem -noout -dates
🏷️ Voir le sujetopenssl x509 -in cert.pem -noout -subject
🏢 Voir l’émetteuropenssl x509 -in cert.pem -noout -issuer
🔢 Numéro de sérieopenssl x509 -in cert.pem -noout -serial

🔄 Conversions de format

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 2048openssl genrsa -out key.pem 2048
🔑 Générer clé RSA 4096openssl genrsa -out key.pem 4096
🔐 Clé RSA chiffréeopenssl genrsa -aes256 -out key.pem 2048
📝 Générer CSRopenssl req -new -key key.pem -out request.csr
⚡ Clé + CSR en une commandeopenssl 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 HTTPSopenssl s_client -connect example.com:443
📜 Afficher le certificatopenssl s_client -connect example.com:443 -showcerts
🔒 Forcer TLS 1.2openssl s_client -connect example.com:443 -tls1_2
🔒 Forcer TLS 1.3openssl s_client -connect example.com:443 -tls1_3
📧 Test SMTP STARTTLSopenssl s_client -connect mail.example.com:587 -starttls smtp
📧 Test IMAP STARTTLSopenssl s_client -connect mail.example.com:143 -starttls imap
🗄️ Test MySQL/MariaDB SSLopenssl 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 fichieropenssl enc -aes-256-cbc -salt -in file.txt -out file.enc
🔓 Déchiffrer un fichieropenssl enc -d -aes-256-cbc -in file.enc -out file.txt
🔒 Chiffrer avec pbkdf2openssl enc -aes-256-cbc -salt -pbkdf2 -in file.txt -out file.enc

📊 Hash et signatures

📌 Action🧠 Commande
#️⃣ Hash MD5openssl dgst -md5 file.txt
#️⃣ Hash SHA256openssl dgst -sha256 file.txt
#️⃣ Hash SHA512openssl dgst -sha512 file.txt
✍️ Signer un fichieropenssl dgst -sha256 -sign key.pem -out sig.bin file.txt
✅ Vérifier signatureopenssl 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 OpenSSLopenssl version
📋 Version détailléeopenssl version -a
🔐 Liste des ciphersopenssl ciphers -v
🎲 Générer mot de passeopenssl rand -base64 32
🎲 Générer hex aléatoireopenssl rand -hex 16
📝 Encoder en base64openssl base64 -in file.bin -out file.b64
📝 Décoder base64openssl 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