[Tuto] DANE – TLSA

L’IETF (Internet Engineering Task Force) a proposé le protocole/mécanisme DANE (DNS – based Authentication of Named Entities) qui s’appuie sur le DNS pour authentifier des entités applicatives.

Cette démarche s’enregistre dans une logique de sécurisation des accès clients-serveurs en:

– Sécurisant les requêtes DNS effectuées depuis les postes clients au travers des protocoles/mécanismes DNSSEC et TLS
– Mieux sécuriser les accès chiffrés des clients vers le serveurs

En gros grâce à ce protocole, plus besoin de TLS signé au-près d’une autorité de certification reconnu ou intermédiaire pour vérifier l’identité numérique d’un site web. Sachant que les autorités peuvent signé tout et n’importe quoi en échange de la moneyyyy. On peut donc se demander : peut-on vraiment faire confiances aux-autorités de certifications… ?

C’est là que le protocol DANE / TLSA intervient ! 🙂
On créer un certificat TLS auto-signé, on créer notre propre autorité de certification, on génère une clé privée et une clé public.Ensuite on récupérè l’empreinte de la clé public avec openssl (sous Linux) et on créer un enregistrement DNS type TLSA dans lequel on met notre clé public.

Pour que ça soit pertinant il faut que le serveur DNS soit protégé avec DNSSEC, pour eviter les menssonges.
Et dans ce cas la, un certificat auto-signé qui est gratuit à beaucoup plus de valeur qu’un certificat d’une autorité reconnu ou intermédiare. 🙂

Le principe est décrit dans les normes IETF suivantes:

RFC 6394: Cas d’utilisation DANE
RFC 6698: Protocole DANE

D’autres protocoles peuvent aussi mettre leurs clés dans le DNS comme SSH avec le RFC 4255 et IPsec avec le RFC 4025.

À noter que les RFC demandent que les enregistrements DANE/TLSA soient protégés par DNSSEC mais ne précise pas comment le client le vérifiecar il existe plusieurs façons de déployer DNSSEC.

Un enregistrement TLSA comprend :

– Un champ « Utilisation du certificat » (Certificate usage),
– Un champ « Sélecteur » (Selector),
– Un champ « Méthode de correspondance » (Matching type),
– Un champ « Données » (Data).


Le premier, « Utilisation du certificat », voit ses valeurs possibles enregistrées dans un nouveau registre IANA. On pourra ainsi ajouter de nouvelles utilisations sans modifier ce RFC. Pour l’instant, sont définies les valeurs numériques :

0 : l’enregistrement TLSA est alors utilisé comme « contrainte sur l’AC ». Il spécifie un certificat qui doit être présent dans la chaîne des certificats utilisés pour la validation X.509. Il vient donc en complément de X.509. Son rôle est de lutter contre des attaques par une AC qui n’est pas celle choisie. Si on est client de GeoTrust, on peut mettre le certificat de l’AC GeoTrust dans l’enregistrement TLSA et, ainsi, un vrai/faux certificat émis par Comodo ou DigiNotar sera refusé. L’utilisation 0 est la plus traditionnelle, sans remplacer X.509 et bouchant simplement sa principale vulnérabilité. Attention si vous changez d’AC, il faudra quand même penser à mettre à jour vos enregistrements TLSA.

1 : l’enregistrement TLSA indique le certificat du serveur TLS (qui devra toujours, comme dans l’utilisation 0, être validé selon les règles du RFC 5280). Il s’agit d’une « contrainte sur le certificat » et plus seulement sur l’AC. Il permet donc de se protéger contre une attaque par sa propre AC. Si elle décide d’émettre un nouveau certificat sans vous prévenir, il ne sera pas accepté. Attention en pratique, on change de certificats plus souvent que d’AC et il ne faut pas oublier de mettre à jour le TLSA.

2 : cette fois, on quitte les rivages de X.509. Un certificat ainsi publié n’a plus besoin de passer la validation X.509 ou, plus exactement, la validation ne se fait que via l’AC qui détient ce certificat. Il s’agit donc de déclarer dans le DNS une nouvelle AC, en ignorant les AC pré-définies du client TLS. Un exemple typique est le cas d’une organisation qui est sa propre AC et émet ses propres certificats. Elle peut ainsi les voir acceptés automatiquement, sans payer une AC extérieure dont la fiabilité est douteuse.

3 : comme l’utilisation 2, on se passe de l’infrastructure des AC traditionnelles, et on déclare dans le DNS, non pas une AC à soi comme dans l’utilisation 2, mais un certificat. C’est l’équivalent des certificats auto-signés mais avec cette fois une preuve de validité, offerte par DNSSEC.


Le sélecteur, quant à lui, fait également l’objet d’un registre IANA. Actuellement, il compte deux valeurs numériques. D’autres pourront être ajoutées, sous la seule obligation d’une spécification écrite et stable :

0 : l’enregistrement TLSA contient (dans son champ « Données ») le certificat complet.
1 : l’enregistrement TLSA ne contient que la clé publique, omettant le reste du certificat.


Et la méthode de correspondance ? Voici un nouveau registre IANA, et ses valeurs :

0 : la valeur dans le champ « Données » de l’enregistrement TLSA est la valeur exacte, à comparer bit à bit avec celle récupérée dans la session TLS.
1 : la valeur dans le champ « Données » de l’enregistrement TLSA est le condensat SHA-256 de celle récupérée dans la session TLS.
2 : idem, avec SHA-512.

Mettre en place un enregistrement TLSA

Comme expliquer plus haut, il est recommandé d’avoir une zone DNS avec DNSSEC, voici une documentation sur DNS ici et pour mettre en place son serveur DNS avec DNSSEC ici.

$ openssl x509 -noout -fingerprint -sha256 < /votre/certificat | tr -d :
SHA256 Fingerprint=29125A483B5D9C3A8063BC55BF3797D11AD2CE2AD213EC47CF5C7964008A71B6

_443._tcp.www.lnaze.net. IN  TLSA 3 0 1 29125A483B5D9C3A8063BC55BF3797D11AD2CE2AD213EC47CF5C7964008A71B6
_443._tcp.lnaze.net.	 IN  TLSA 3 0 1 29125A483B5D9C3A8063BC55BF3797D11AD2CE2AD213EC47CF5C7964008A71B6

3 – Incrémenter le serial et re signer la zone DNS

4 – Enjoy 🙂

Vous pouvez tester si votre site web possède utilise DNSSEC et s’il y à une entrée TLSA, pour cela un addons firefox : DNSSEC-TLSA Validator et si les voyants sont verts, c’est que vous avec bien un enregistrement TLSA et DNSSEC.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *