(modifié le 19 octobre 2018 à 18:01)

Aujourd'hui on parle sécurité. Comment obtenir un grade A+ avec testeur SSL Qualys sur votre serveur HTTPS ?

qualys-a-plus
Proposer du HTTPS est une bonne chose, encore faut-il que le serveur soit bien configuré. Heartbleed en est la preuve.

Certificat gratuit ou payant

Ce n'est pas le coût d'un certificat qui rend la liaison sécurisée. Un certificat auto-généré n'est pas moins bon qu'un certificat de EV (validation étendue) qui coûte une blinde. Là derrière se cache un énorme marché similaire à celui des noms de domaine, on vous vend du vent.

La différence est qu'un certificat auto-signé génère une alerte dans votre navigateur, et les utilisateurs non avertis prennent peur. Un certificat reconnu par une autorité de certification inhibe toute alerte car tous les navigateurs disposent d'une base d'autorités de certifications qui peuvent vendre des certificats reconnus partout.

Certes cela peut paraître flippant d'aller sur un site bancaire avec un certificat auto-signé, mais cela ne sera pas moins sécurisé. Le seul risque avec un certificat auto-généré est que si une personne intercepte votre flux (MITM) vous pouvez valider le certificat proposé alors que ce ne sera pas le bon. D'où l'intérêt d'ajouter une exception permanente dans Firefox (pas possible directement dans Chrome et IE).

Voici les différents types de certificats :

  • classe 1 : il n'y a pas de contrôle de l'identité du détenteur du certificat,
  • classe 2 : il y a un contrôle sur pièces (l'identité doit être prouvée),
  • classe 3 : la présentation physique du demandeur est requise (face à face),
  • classe 3+ : identique à la classe 3 avec un support physique (clé USB, carte à puce).

Pour bien comprendre l'évolution des certificats je vous invite à lire ce billet très complet.

La bonne configuration

HTTPS n'est pas un simple bouton ON / OFF. Il nécessite une configuration particulière dans votre serveur web (apache, nginx, lighttpd, etc). Avoir une bonne configuration HTTPS prend du temps, cela demande de faire des tests, de vérifier avec différents systèmes d'exploitations et navigateurs pour n'exclure personne. Il faut trouver la juste mesure entre sécurité et accessibilité.

Il faut par exemple désactiver SSLv2 et SSLv3 car touchés par de nombreuses failles, au profit de TLS. Mais également préciser les bons "ciphers" ou suites de chiffrement. Avec plus de 100 les combinaisons sont très nombreuses, avec des algos de chiffrement considérés aujourd'hui comme des passoires (coucou RC4).

Sur le web on trouve de nombreux tutoriels, avec des combinaisons les plus exotiques les unes que les autres, c'est un peu l'enfer. Je lisais un billet sur le blog de Mickaël Coutron qui terminait avec une capture du grade A+ de son certificat, du coup je l'interpellais sur sa configuration.

Suite à ma sollicitation deux jours plus tard il publie donc cet excellent tutoriel sur la configuration à utiliser pour parvenir à un grade A+ chez Qualys, avec les directives Apache mais aussi nginx. J'ai découvert à cette occasion le site Cipherli.st qui liste les ciphers les plus robustes à utiliser :

cipherli-st

Mozilla propose également son outil : https://mozilla.github.io/server-side-tls/ssl-config-generator/

Pour tout comprendre sur TLS je vous invite à lire cet excellent billet qui en plus propose deux conférences :

  • conférence 1 (webm)
  • conférence 2 (webm)

Ainsi que les recommandations de l'ANSSI qui indique les ciphers acceptables et l'analyse de flux HTTPS. Un dépôt github propose quelques configurations type avec les conséquences de compatibilité sur les navigateurs.

Vérifier son certificat

Impossible de vérifier manuellement si un serveur délivrant du HTTPS est bon ou non, car comme je l'ai dit les combinaisons entre algo de chiffrement, OS, navigateur sont multiples.

Je vous conseille donc :

A installer sur votre machine :

Vous pouvez vérifier n'importe quel site, et je vous encourage à vérifier ceux que vous utilisez le plus (banque, email, etc).

J'utilise d'ailleurs l'extension Firefox SSLeuth qui attribue une note sur la qualité HTTPS de chaque site visité. Comme ici avec Boursorama :

ssleuth

Pour info Twitter est à 10/10. Cela ne veut pas dire que l'accès à Boursorama n'est pas sécurisé, mais que tout les mécanismes permettant d'être au pallier maximum de ce qu'il est possible de faire ne sont pas présents. Les motifs peuvent être multiples : coût, incompétence, incompatibilité technique et même volontaire pour assurer une compatibilité maximum.

29/08/2018 : malheureusement l'extension SSLeuth n'est plus compatible avec Firefox depuis Firefox Quantum et je ne connais pas d'alternative

Tester la connexion côté client

Sous GNU/Linux pour tester la connexion en présentant un cipher particulier :

openssl s_client -cipher 'ECDHE-RSA-AES256-GCM-SHA384 ' -connect www.monsite.com:443

Pour tester la connexion et voir quel cipher est négocié :

openssl s_client -connect www.monsite.com:443

Lister tous les ciphers côté client :

openssl ciphers -v

Lister les ciphers côté client excepté ceux sans chiffrement (eNULL) ou sans authentification (aNULL) :

openssl ciphers -v 'ALL:!aNULL'

Voir la liste des Ciphers chez imirhil

Pour tester le ciphers supportés par votre serveur utilisez l'outil testssl.sh.

Ne négligez pas votre serveur

Si vous vous dites que personne (ou peu de monde) accède à votre serveur, et qu'il n'est pas nécessaire de monter le niveau de sécurité détrompez-vous !

S'il est accessible depuis le web votre serveur se retrouvera tôt ou tard dans des listes de futures victimes... en effet les outils de test gardent souvent la trace des URLs saisies et si vous décochez la case pour ne pas mémoriser une autre personne peut très bien ne pas le faire. Sans parler des robots qui scannent le web à la recherche de heartbleed, poodle... sachant que l'IPv4 est saturé votre IP sera scannée.

En complément :

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter