Erreur SSL Handshake Failed
Diagnostic et résolution des échecs de négociation SSL/TLS.
L'erreur "SSL Handshake Failed" se produit lorsque le client (navigateur) et le serveur ne parviennent pas à établir une connexion sécurisée. Le handshake SSL/TLS est un processus de négociation où les deux parties s'accordent sur les protocoles et les algorithmes de chiffrement à utiliser. Si cette négociation échoue, aucune communication sécurisée n'est possible.
Cette erreur est souvent plus technique que les autres erreurs SSL car elle implique la compatibilité entre les versions de protocoles et les suites de chiffrement. Elle peut survenir côté serveur (configuration incorrecte) ou côté client (navigateur trop ancien ou trop récent).
Dans ce guide, nous allons explorer les causes courantes de l'échec du handshake SSL et vous donner les outils pour diagnostiquer et résoudre le problème, que vous soyez administrateur serveur ou utilisateur final.
Symptômes de l'Échec du Handshake
Voici comment cette erreur se manifeste :
- Chrome : affiche ERR_SSL_PROTOCOL_ERROR ou ERR_SSL_VERSION_OR_CIPHER_MISMATCH selon la cause exacte.
- Firefox : affiche SSL_ERROR_HANDSHAKE_FAILURE_ALERT avec peu de détails sur la cause.
- Curl/API : retourne "SSL routines:ssl3_get_server_certificate:certificate verify failed" ou similaire.
- Applications : les applications peuvent afficher "Connection reset" ou simplement échouer sans message clair.
Causes de l'Échec du Handshake
Plusieurs situations peuvent provoquer cette erreur :
- Protocole SSL/TLS obsolète : le serveur utilise encore SSL 3.0 ou TLS 1.0/1.1 que les navigateurs modernes refusent. Les navigateurs actuels exigent TLS 1.2 ou 1.3.
- Cipher suites incompatibles : le client et le serveur n'ont aucune suite de chiffrement en commun. Le serveur propose des ciphers que le client refuse.
- Certificat non correspondant : le nom de domaine dans le certificat ne correspond pas à celui demandé, ou le SNI n'est pas supporté.
- Configuration serveur incorrecte : fichiers de certificat mal formatés, clé privée incorrecte, ou chaîne de certificats mal ordonnée.
Diagnostic de l'Échec
Suivez ces étapes pour identifier la cause :
- Testez avec SSL Labs : SSL Labs analyse la configuration complète du serveur et signale les protocoles et ciphers supportés.
- Vérifiez les protocoles : utilisez openssl s_client pour tester la connexion avec différentes versions de TLS.
- Analysez les logs serveur : les logs Apache/Nginx contiennent souvent des détails sur l'échec du handshake.
- Testez le SNI : si plusieurs sites partagent la même IP, vérifiez que le SNI est correctement configuré.
Diagnostic du Handshake SSL
Utilisez ces commandes pour diagnostiquer le problème :
#!/bin/bash
# Diagnostic handshake SSL
DOMAIN="example.com"
echo "=== Test TLS 1.2 ==="
openssl s_client -connect $DOMAIN:443 -tls1_2 -servername $DOMAIN </dev/null 2>&1 | grep -E "(Protocol|Cipher|Verify)"
echo ""
echo "=== Test TLS 1.3 ==="
openssl s_client -connect $DOMAIN:443 -tls1_3 -servername $DOMAIN </dev/null 2>&1 | grep -E "(Protocol|Cipher|Verify)"
echo ""
echo "=== Ciphers supportés ==="
nmap --script ssl-enum-ciphers -p 443 $DOMAIN 2>/dev/null | grep -E "(TLSv|accepted)"
Ces commandes testent les protocoles TLS supportés et listent les suites de chiffrement acceptées. Si TLS 1.2 et 1.3 échouent tous les deux, il y a un problème de configuration majeur.
Bonnes Pratiques de Configuration
Configurez votre serveur correctement pour éviter les échecs :
- Utilisez TLS 1.2+ uniquement : désactivez SSL 3.0, TLS 1.0 et TLS 1.1. Ces protocoles ont des vulnérabilités connues et ne sont plus acceptés.
- Configurez des ciphers modernes : utilisez les recommandations Mozilla pour une configuration SSL moderne, intermédiaire, ou compatible.
- Activez le SNI : si vous hébergez plusieurs domaines sur le même serveur, le SNI est indispensable pour servir le bon certificat.
- Testez après chaque changement : après toute modification de configuration SSL, testez avec SSL Labs pour valider.
Checklist Handshake SSL
- Protocoles TLS 1.2 et 1.3 activés
- SSL 3.0 et TLS 1.0/1.1 désactivés
- Ciphers modernes configurés
- Certificat correspondant au domaine
- Chaîne de certificats complète
- Test SSL Labs grade A ou B
Questions Fréquentes
Pourquoi l'erreur apparaît avec d'anciens navigateurs ?
Les anciens navigateurs (IE 10, Safari 8) ne supportent que des protocoles obsolètes. Vous devez choisir entre sécurité et compatibilité.
Comment savoir quels ciphers activer ?
Utilisez le générateur de configuration Mozilla SSL. Il propose trois profils : moderne, intermédiaire, et ancien.
L'erreur apparaît uniquement sur certains clients ?
Cela indique une incompatibilité de protocole ou cipher. Le client affecté utilise probablement une configuration obsolète.
Mon API échoue avec cette erreur, que faire ?
Vérifiez la version de la bibliothèque SSL utilisée par votre client API. Mettez à jour vers une version supportant TLS 1.2+.
Comment forcer TLS 1.3 sur mon serveur ?
Cela dépend de votre serveur web. Sur Nginx, utilisez ssl_protocols TLSv1.2 TLSv1.3; sur Apache, SSLProtocol -all +TLSv1.2 +TLSv1.3.
MoniTao détecte-t-il les problèmes de handshake ?
Oui, MoniTao teste la connexion HTTPS complète. Si le handshake échoue, vous recevez une alerte avec le détail de l'erreur.
Assurez une Négociation SSL Réussie
Les échecs de handshake SSL sont souvent causés par des configurations obsolètes ou incompatibles. Maintenez votre serveur à jour et utilisez les protocoles et ciphers modernes.
MoniTao surveille vos connexions HTTPS et vous alerte immédiatement si un problème de handshake est détecté. Configurez un monitor pour chaque domaine critique.
Liens utiles
Prêt à dormir sur vos deux oreilles ?
Commencez gratuitement, sans carte bancaire.