Ce petit billet me sert principalement de garde-mémoire, je ne vais donc pas détailler ce qu'est le champ TLSA et son but ; ceci est détaillé dans la RFC6698 “The DNS-Based Authentication of Named Entities (DANE) Transport Layer Security (TLS) Protocol: TLSA” (
https://tools.ietf.org/html/rfc6698)
Pour déterminer les hashs (SHA256 et SHA512) à partir de la clef privée (n’oubliez pas l’option -pubout, voir openssl pkey(1)) :
openssl pkey -outform DER -pubout -in "/path/to/private.key" | openssl dgst -sha256
openssl pkey -outform DER -pubout -in "/path/to/private.key" | openssl dgst -sha512
Pour déterminer les hashs (SHA256 et SHA512) à partir d'un certificat (de n’inporte quelle authorité), utilisez les valeurs "3 1 1" et "3 1 2" respectivement et exécutez les commandes avec OpenSSL suivantes :
openssl x509 -noout -pubkey -in "/path/to/certificat_file.pem" | openssl pkey -outform DER -pubin | openssl dgst -sha256
openssl x509 -noout -pubkey -in "/path/to/certificat_file.pem" | openssl pkey -outform DER -pubin | openssl dgst -sha512
Par contre, si vous êtes une autorité auto-signée, utilisez les valeurs "3 0 1" et "3 0 2" respectivement, et exécutez :
openssl x509 -noout -fingerprint -sha256 -in "/path/to/certificat_file.pem"
openssl x509 -noout -fingerprint -sha512 -in "/path/to/certificat_file.pem"
Ensuite, créer une entrée DNS dans votre zone, en suivant la sémantique suivante :
_<port>._<protocole>.<nomdedomaine> IN TLSA <X Y Z> <hash>
Par exemple, pour avoir le hash du certificat pour le service HTTPS, donc le protocole TCP qui répond au port 443, sur la machine foo.example.com, le résultat est "_443._tcp.foo.example.com." (ne pas oublier le dernier point à la fin).
Et pour les valeurs <X Y Z> :
X →
https://tools.ietf.org/html/rfc6698#section-2.1.1 : la valeur "3" indique que ce sont des informations avec le certificat le plus proche.
Y →
https://tools.ietf.org/html/rfc6698#section-2.1.2 : exporter la clef est plus simple, de ce que j’ai compris.
Z →
https://tools.ietf.org/html/rfc6698#section-2.1.3 : "1" pour le hash SHA256, "2" pour le hash SHA512.
Concernant le hash, n'oubliez pas de supprimer les doubles-points (par exemple : echo $hash | tr -d ':')
Sources :
-
https://www.ietf.org/mail-archive/web/dane/current/msg07210.html
-
https://tools.ietf.org/html/rfc6698