SSL, choix des suites de chiffrements, HSTS et co

Salut, à tous

Avec la NSA et les révélations de Snowden, on parle énormément de SSL et de HSTS, alors je m’y met aussi :).
Concernant ce qu’il y a à savoir sur les suites de chiffrements, je vous conseils cette vidéo, ou je fait un peu le tour des différentes étapes (échanges de clé, auth, chiffrements, …), ainsi qu’un rapide résumé sur les différentes attaques et leurs implications sur le protocole utilisé (tls 1.0, beast et les chiffrements CBC).

Pour ceux que la vidéo n’intéresse pas, en résumé :

  • les chiffrements CBC sont à bannir en TLSv1.0 (BEAST). (En fait le protocole 1.0 est à bannir ^^).
  • le chiffrement RC4 est à bannir.
  • préférer les échanges de clé ECDH ou DH (apparement craquable par la NSA :/) pour le forward secrecy

Pour cet article (un rapide résumé de ce que je dit dans la première partie de ma dernière video), je suppose que vous avez déjà installé un certificat sur votre serveur web.

Les éléments définissant ma suite de chiffrement (à vous de définir la votre) :

  • Comme j’utilise un serveur Apache 2.2, je ne peux donc pas utiliser tout échange de clé et authentification par Elliptic Curve. (Donc pas d’ECDH/ECDSA)
  • Réduire le nombre de suite utilisant des échanges de clé RSA
  • Bannir le RC4
  • Rejeter les suites propre au TLSv1.0 (SHA1)
  • Rejeter les chiffrements les plus faibles (128bits, …)

Ce qui donne :

SSLEngine on
#en fonction de votre modssl, cette ligne peut planter
SSLProtocol -all +TLSv1.1 +TLSv1.2
SSLCipherSuite 'aRSA+AES -kRSA -AES128 -SHA1 -RC4 DHE-RSA-AES256-SHA'

Ce qui donne la suite de chiffrement suivante (retourné via la commande openssl ciphers -v ‘aRSA+AES -kRSA -AES128 -SHA1 DHE-RSA-AES256-SHA’) :

ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA384
DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA256
DHE-RSA-AES256-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA1

(Apache ne supportant pas les EC, ils ne seront pas proposé au client).

La mise en place de l’HSTS est trivial, on enable le mod header (a2enmode header) et on rajoute à notre conf ssl :

Header add Strict-Transport-Security "max-age=15768000"

Et vous voilà prêts à vous battre contre Big Brother ^^. L’article sur l’authentification avec certificat SSL arrive bientôt :).