Mon certificat SSL est-il bien configuré ?
En bref : il est bien configuré quand le certificat est reconnu (chaîne complète), couvre chaque nom que vous utilisez (avec et sans www), se renouvelle automatiquement bien avant l’expiration, que seuls TLS 1.2 et 1.3 sont activés, que chaque requête http:// redirige vers https:// et que HSTS est en place. Le cadenas seul ne prouve que le premier point.
Étapes rapides
- Vérifiez que la chaîne est reconnue. Ouvrez le site dans une fenêtre privée sur un téléphone et sur un ordinateur ; aucun avertissement ne doit apparaître.
- Vérifiez les noms. Le certificat doit inclure votredomaine.com et www.votredomaine.com si vous utilisez les deux.
- Vérifiez l’expiration et le renouvellement. Lisez notAfter et testez que le renouvellement automatique fonctionne.
- Vérifiez les versions de TLS. N’autorisez que TLS 1.2 et TLS 1.3.
- Vérifiez la redirection. http:// doit rediriger de façon permanente vers https://.
- Vérifiez HSTS. Envoyez Strict-Transport-Security une fois que HTTPS fonctionne partout.
Le code et la configuration restent en anglais.
1. Une chaîne complète et reconnue
Le serveur doit aussi envoyer le certificat intermédiaire. Sans lui, le site fonctionne souvent sur les navigateurs d’ordinateur mais échoue sur les téléphones et les clients d’API.
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com -showcerts </dev/null 2>/dev/null | grep -E 's:|i:|Verify return'Cherchez Verify return code: 0 (ok). Dans nginx, ssl_certificate doit pointer vers le fichier de chaîne complète (avec Let’s Encrypt : fullchain.pem, pas cert.pem).
2. Tous les noms sont couverts
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com </dev/null 2>/dev/null \
| openssl x509 -noout -ext subjectAltName3. Expiration et renouvellement automatique
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com </dev/null 2>/dev/null \
| openssl x509 -noout -enddate
sudo certbot renew --dry-run # if you use certbotHackGrade signale un certificat comme risque moyen à moins de 21 jours de son expiration, élevé à moins de 14 jours, et critique dès qu’il a expiré ou n’est pas reconnu.
4. Uniquement TLS 1.2 et 1.3
ssl_protocols TLSv1.2 TLSv1.3;SSLProtocol -all +TLSv1.2 +TLSv1.3Vérifiez qu’une ancienne version est refusée (la connexion doit échouer) :
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com -tls1_1 </dev/null5. HTTP redirige vers HTTPS
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]6. HSTS
Une fois que chaque page et chaque sous-domaine fonctionne en HTTPS, ajoutez Strict-Transport-Security. Lisez d’abord le guide HSTS (en anglais) : commencez avec un max-age court, puis augmentez-le. Corrigez ensuite tout contenu mixte (en anglais).
Questions fréquentes
Un certificat gratuit (Let’s Encrypt) est-il moins sûr qu’un certificat payant ?
Non. Le chiffrement est le même. Les certificats payants diffèrent par le type de validation, l’assistance et la garantie, pas par la qualité du chiffrement.
Pourquoi mon site affiche-t-il un avertissement seulement sur certains téléphones ?
En général à cause d’un certificat intermédiaire manquant. Configurez le serveur avec le fichier de chaîne complète.
Dois-je encore prendre en charge TLS 1.0 ou 1.1 ?
Non. Les deux sont obsolètes (RFC 8996) et les navigateurs modernes ne les prennent plus en charge.