Forward Secrecy

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Durcissement TLS
Module mod_ssl
Fichier section SSL du vhost (souvent ssl.conf)
Voir aussi Apache · Configurer vhost securise

La Forward Secrecy (ou Perfect Forward Secrecy, PFS) est une propriété d'un échange TLS garantissant que la compromission ultérieure de la clé privée du serveur ne permet pas de déchiffrer rétroactivement du trafic capturé auparavant. Elle repose sur des suites de chiffrement à échange de clé éphémère (DHE/EECDH), qui génèrent une clé de session différente à chaque connexion au lieu de dériver directement la clé du certificat du serveur.

Tester la configuration TLS d'un site

https://www.ssllabs.com/ssltest/analyze.html

Configurer la section SSL du vhost

# Protocoles autorisés : on désactive les versions dépréciées (SSLv2, SSLv3)
SSLProtocol all -SSLv2 -SSLv3

# Le serveur impose l'ordre de préférence des suites de chiffrement, plutôt que le client
SSLHonorCipherOrder on

# Suite de chiffrement : privilégier les échanges de clé éphémères (Forward Secrecy),
# écarter RC4/3DES/MD5 et les suites sans authentification
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+AESGCM EECDH EDH+AESGCM EDH+aRSA HIGH !MEDIUM !LOW !aNULL !eNULL !RC4 !MD5 !EXP !PSK !SRP !DSS"

# Empêche les attaques par compression (CRIME/BREACH)
SSLCompression Off

# Impose HTTPS pendant 180 jours (HSTS)
Header always set Strict-Transport-Security "max-age=15552000"

(à vérifier) Configuration datée

L'exemple ci-dessus vient d'une époque (mi-2010s) où il fallait encore composer avec des clients anciens (IE8 sur Windows XP notamment), d'où des suites de secours contenant RC4 ou 3DES dans certaines variantes. RC4 est aujourd'hui considéré cassé et ne doit plus figurer dans aucune suite active ; SSLv3 est lui-même obsolète (vulnérabilité POODLE) et ne devrait plus être négocié du tout, y compris en fallback.

Sur un parc actuel, l'approche recommandée est plus simple :

SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite HIGH:!aNULL:!MD5:!3DES:!RC4
SSLHonorCipherOrder off

(SSLHonorCipherOrder devient inutile avec TLS 1.3, qui a fixé la liste des suites utilisables). Pour éviter de maintenir cette liste à la main, le générateur de configuration Mozilla SSL Configuration Generator propose des profils "modern"/"intermediate" tenus à jour selon le niveau de compatibilité navigateur souhaité.

Vérifier depuis un client

Forcer une suite de chiffrement précise pour valider qu'elle est bien acceptée (ou rejetée) par le serveur :

openssl s_client -connect exemple.example.com:443 -cipher ECDHE-RSA-AES256-SHA

Voir aussi