OpenSSL est le couteau suisse des certificats SSL/TLS. Chaque article de ce site fait reference a des commandes OpenSSL — cette page les rassemble toutes au meme endroit.
Verifier un certificat
Afficher les details du certificat (serveur distant)
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -text
Verifier la date d’expiration
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate
Verifier le sujet et les SANs
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -subject -ext subjectAltName
Verifier l’emetteur (quelle CA)
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -issuer
Verifier un fichier de certificat local
openssl x509 -in cert.pem -noout -text
openssl x509 -in cert.pem -noout -dates # Juste les dates
openssl x509 -in cert.pem -noout -subject # Juste le sujet
openssl x509 -in cert.pem -noout -ext subjectAltName # Juste les SANs
Verifier la chaine de certificats
Verifier la completude de la chaine (distant)
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null
# Recherchez :
# Verify return code: 0 (ok) <- La chaine est complete
# Verify return code: 21 (unable to verify) <- La chaine est incomplete
Verifier un certificat par rapport a un fichier de chaine
openssl verify -CAfile chain.pem cert.pem
# Attendu : cert.pem: OK
Verifier si le certificat et la cle correspondent
# Ces deux hachages doivent etre identiques
openssl x509 -noout -modulus -in cert.pem | openssl md5
openssl rsa -noout -modulus -in privkey.pem | openssl md5
# Pour les cles ECDSA :
openssl ec -in privkey.pem -pubout 2>/dev/null | openssl md5
openssl x509 -in cert.pem -pubkey -noout | openssl md5
Generer des cles
ECDSA P-256 (recommande)
openssl ecparam -genkey -name prime256v1 -noout -out privkey.pem
RSA 2048
openssl genrsa -out privkey.pem 2048
RSA 4096
openssl genrsa -out privkey.pem 4096
Generer un CSR
ECDSA
openssl req -new -key privkey.pem -out csr.pem -subj "/CN=example.com"
Avec SANs (multi-domaine)
openssl req -new -key privkey.pem -out csr.pem \
-subj "/CN=example.com" \
-addext "subjectAltName=DNS:example.com,DNS:www.example.com"
Inspecter un CSR
openssl req -in csr.pem -noout -text
Convertir entre les formats
PEM -> PFX (pour Windows/IIS)
openssl pkcs12 -export -out cert.pfx -inkey privkey.pem -in cert.pem -certfile chain.pem
PFX -> PEM
openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.pem
openssl pkcs12 -in cert.pfx -nocerts -nodes -out privkey.pem
openssl pkcs12 -in cert.pfx -cacerts -nokeys -out chain.pem
PEM -> DER
openssl x509 -in cert.pem -outform DER -out cert.der
DER -> PEM
openssl x509 -in cert.der -inform DER -outform PEM -out cert.pem
Les formats de certificats expliques ->
Deboguer les connexions TLS
Tester quelle version TLS est negociee
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | grep "Protocol"
Tester une version TLS specifique
# Tester TLS 1.2
echo | openssl s_client -connect example.com:443 -servername example.com -tls1_2 2>/dev/null | grep "Protocol"
# Tester TLS 1.3
echo | openssl s_client -connect example.com:443 -servername example.com -tls1_3 2>/dev/null | grep "Protocol"
Afficher la poignee de main complete
openssl s_client -connect example.com:443 -servername example.com -msg
Verifier les suites de chiffrement prises en charge
# Lister tous les chiffrements acceptes par le serveur
nmap --script ssl-enum-ciphers -p 443 example.com
Generer un certificat auto-signe (developpement uniquement)
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout key.pem -out cert.pem -days 365 -nodes \
-subj "/CN=localhost" \
-addext "subjectAltName=DNS:localhost,IP:127.0.0.1"
Pour un HTTPS localhost de confiance, utilisez plutot mkcert.
Creer fullchain.pem a partir de fichiers separes
cat cert.pem chain.pem > fullchain.pem
L’ordre est important : votre certificat d’abord, puis le(s) intermediaire(s).
Questions frequemment posees
Comment installer OpenSSL ?
La plupart des distributions Linux l’incluent. Sur macOS : brew install openssl. Sur Windows : installez via Git for Windows (inclut OpenSSL) ou Chocolatey (choco install openssl).
Quelle est la difference entre openssl x509 et openssl s_client ?
x509 lit un fichier de certificat local. s_client se connecte a un serveur distant et recupere son certificat. Utilisez s_client pour verifier un serveur en direct ; utilisez x509 pour inspecter un fichier sur le disque.
Pourquoi mes commandes affichent-elles “unable to load certificate” ?
Le fichier est probablement encode en DER (binaire), pas en PEM (texte). Ajoutez -inform DER a la commande :
openssl x509 -in cert.der -inform DER -noout -text