/ Linux

Sécuriser l'accès à son site internet avec le protocole DANE

Je suis tombé récemment sur un dossier thématique de l'AFNIC abordant la sécurisation des échanges sur internet à l'aide des protocoles DNSSEC et DANE. Ça fait maintenant plus d'un an que mon domaine meshup.net est sécurisé avec DNSSEC et j'ai ajouté DANE en décembre dernier, c'est l'occasion d'en parler un peu ici.

DANE (DNS - based Authentication of Named Entities) est un protocole proprosé par l'IETF avec la RFC6698 permettant d'associer un nom de domaine avec un certificat X.509 en utilisant la version sécurisée du DNS (DNSSEC).

Donc ces deux protocoles sont indissociables, DANE n'a aucun intérêt sans DNSSEC. Si vous n'êtes pas familier avec tous ces termes, vous pouvez lire le dossier de l'Afnic (voir lien plus haut) qui traite très bien le sujet. Dans cet article, je vais plutôt parler de la mise en place côté serveur.

DANE ne s'applique pas uniquement aux sites internet, on peut l'utiliser pour la messagerie électronique (l'implémentation de DANE avec postfix fera l'objet d'un prochaine article), la messagerie instantanée (XMPP)...etc. Ici nous allons l'appliquer pour un site internet.

Il va falloir ajouter un nouvel enregistrement de type TLSA dans notre zone DNS. Cet enregistrement s'organise comme ceci :

TLSA RRSet

Comme on peut le voir, on associe bien un "service", dans notre cas il s'agit de SSL/TLS sur le port 443, avec un certificat X.509 au moyen de son empreinte (fingerprint).

Ensuite il y a plusieurs options à définir :

  • Usage [3] : Permet de spécifier un certificat de type « Domain Issued Certificate », équivalent à un certificat auto-signé mais avec une preuve de validité fournie par DNSSEC. Les autres options (0, 1, 2) décrivent d'autres usages au niveau de l'AC (voir la RFC).
  • Selecteur [0] : Permet de spécifier quelle partie du certificat doit être validée par le client. « 0 » veut dire le certificat dans son intégralité.
  • Méthode de correspondance [1] : Format avec lequel le certificat d'association est présenté au client. « 1 » correspond à un hash SHA-256.
  • Certificat d'association : Certificat X.509 [0] ou empreinte du certificat au format SHA-256 [1] / SHA-512 [2]

Pour obtenir l'empreinte SHA-256 de votre certificat SSL, on va utiliser openssl :

openssl x509 -noout -in domain.tld.crt -fingerprint -sha256

Cette commande retourne le fingerprint SHA-256 du certificat « domain.tld.crt » Une fois l'empreinte obtenu, on ajoute l'enregistrement TLSA à notre zone DNS :

_443._tcp.domain.tld. IN  TLSA  3 0 1  8ab50bf7621262fa794ec7e583...

Pour vérifier la propagation de l'enregistrement, on peut utiliser la commande dig :

dig +nocmd +noall +answer TLSA _443._tcp.domain.tld

Je vous conseille d'installer l'extension « DNSSEC/TLSA validator » disponible pour IE, Firefox, Chromium et Opera. Pratique pour vérifier à la volée la présence de DNSSEC et de l'enregistrement TLSA d'un site web.

L'extension se presente comme ceci :

DNSSEC/TLSA validator

Deux petites icônes vous indiquent l'état de DNSSEC et TLSA sur le domaine actuellement visualisé.

Voila, la mise en place du protocole DANE n'est pas très compliquée, à condition que DNSSEC sécurise déjà le domaine bien entendu, vous pouvez aller voir mon tutoriel sur la mise en place d'un serveur DNS sécurisé avec DNSSEC disponible sur mondedie.fr.

Maintenant il y a plus qu'à espérer que les géants du web adoptent plus rapidement ces protocoles pour rendre caduque les tentatives de phising et autres attaques MITM. Ce n'est pas une solution à tous les problèmes, mais on réduit très largement le champ d'action d'un attaquant.

Sécuriser l'accès à son site internet avec le protocole DANE
Share this