Definition
SSL (Secure Sockets Layer) et son successeur TLS (Transport Layer Security) sont des protocoles cryptographiques qui securisent les communications sur Internet. Ils fournissent le chiffrement, l'authentification et l'integrite des donnees pour le protocole HTTPS.
Bien que SSL soit obsolete depuis 2015 (derniere version : SSL 3.0), le terme "SSL" est encore utilise par habitude. En pratique, tout le monde utilise TLS 1.2 ou TLS 1.3.
Comment fonctionne le TLS Handshake ?
Quand votre navigateur se connecte a un site HTTPS :
- Client Hello : le navigateur envoie les versions TLS et cipher suites supportees
- Server Hello : le serveur choisit la version et la cipher suite, envoie son certificat
- Verification : le navigateur verifie le certificat aupres de l'autorite de certification (CA)
- Echange de cles : echange Diffie-Hellman pour generer une cle de session
- Session securisee : toutes les donnees sont chiffrees avec la cle de session (chiffrement symetrique AES)
En TLS 1.3, ce processus est reduit a 1 aller-retour (contre 2 en TLS 1.2), ameliorant la latence.
Types de certificats
| Type | Validation | Delai | Prix |
|---|---|---|---|
| DV (Domain Validation) | Seul le domaine est verifie | Minutes | Gratuit (Let's Encrypt) |
| OV (Organization Validation) | Organisation verifiee | Jours | 50-200 EUR/an |
| EV (Extended Validation) | Verification approfondie | Semaines | 200-1000 EUR/an |
| Wildcard | *.exemple.com | Variable | Variable |
Let's Encrypt
Let's Encrypt fournit des certificats DV gratuits et automatises. C'est aujourd'hui le standard :
# Avec Certbot (le plus courant)
sudo certbot --nginx -d exemple.com -d www.exemple.com
# Renouvellement automatique
sudo certbot renew --dry-run
Bonnes pratiques
- TLS 1.3 minimum (desactiver TLS 1.0 et 1.1)
- HSTS (HTTP Strict Transport Security) : forcer HTTPS
- OCSP Stapling : accelerer la verification de certificat
- Forward Secrecy : proteger les sessions passees meme si la cle privee est compromise
- Renouvellement automatique : Let's Encrypt expire tous les 90 jours
Configuration Nginx securisee
server {
listen 443 ssl http2;
ssl_certificate /etc/letsencrypt/live/exemple.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemple.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
add_header Strict-Transport-Security "max-age=63072000" always;
}