Enregistrement DNS SSHFP
L'enregistrement DNS SSHFP (SSHFP pour Secure SHell (Key) FingerPrint) est un enregistrement DNS de clefs publiques SSH.
Structure
<Name> [<TTL>] [<Classe>] SSHFP <Algorithme> <Type> <Résultat de la Fonction de hachage>
- <Nom>
- Le nom de domaine de l'objet pour lequel l'enregistrement DNS appartient
- <TTL>
- Le temps de vie (en secondes) durant lequel l'enregistrement réside en cache (facultatif)
- <Classe>
- Protocole de groupe auquel l'enregistrement de ressource appartient (facultatif)
- <Algorithme>
- Algorithme de la clef publique (0=réservé, 1=RSA, 2=DSA, 3=ECDSA, 4=Ed25519) [1]
- <Type>
- Type de fonction de Hachage utilisée (0=réservé, 1=SHA-1, 2=SHA-256) [2]
- <Empreinte>
- Représentation hexadécimale du résultat de la fonction de hachage.
Exemple
- host.example.com. 3600 IN SSHFP 2 1 123456789abcdef67890123456789abcdef67890
Un client peut déterminer dans cet exemple, que l'empreinte SHA-1 de la clef publique DSA de l'hôte, ayant comme nom DNS host.example.com, est : 123456789abcdef67890123456789abcdef67890.
Utilisation du client OpenSSH
Lors de la connexion à un hôte, le client OpenSSH va demander la, ou les, clefs publiques de ce dernier. Une fois cette opération faite, il va pouvoir le comparer avec l'enregistrement DNS SSHFP et ainsi vérifier la concordance entre les deux empreintes.
Cette opération n'est pas activée par défaut dans la version de OpenSSH actuelle, mais il suffit d'ajouter l'option VerifyHostKeyDNS avec comme valeur yes (toujours) ou bien ask (sera demandé à l'utilisateur au moment de la connexion) au fichier de configuration d'OpenSSH (~/config pour un utilisateur ou /etc/ssh/ssh_config pour l'ensemble des comptes du système)[3]. Exemple :
$ ssh -o "VerifyHostKeyDNS ask" host.example.com [...] Matching host key fingerprint found in DNS. Are you sure you want to continue connecting (yes/no)?
Utilisation de la commande ssh-keygen
La commande unix ssh-keygen permet de rapidement et directement générer les données a renseigner au niveau de la zone DNS.
# ssh-keygen -r www.example.com. www.example.com. IN SSHFP 1 1 5f2f2e0676798a0273572bc77b99d6319a560fd5 www.example.com. IN SSHFP 1 2 f5ae7764148c8f587996e5be3324286bdd1e9b935caaf3ff0ed3c9bbc0152097 www.example.com. IN SSHFP 2 1 9b913ce5339f8761c26a2ed755156d4785042b2d www.example.com. IN SSHFP 2 2 15477282e6a510a6c534e61f1df40d3750edcf86c6f4bf2ab5a964ccada7be3d www.example.com. IN SSHFP 3 1 1262006f9a45bb36b1aa14f45f354b694b77d7c3 www.example.com. IN SSHFP 3 2 e5921564252fe10d2dbafeb243733ed8b1d165b8fa6d5a0e29198e5793f0623b
Remarque : Il est important de mettre le '.' en fin de domaine pour travailler en mode absolu et éviter de se retrouver avec des enregistrements tels que www.example.com.example.com.
Liens externes
- RFC 4255[4] – Using DNS to Securely Publish Secure Shell (SSH) Key Fingerprints
- RFC 6594[5] – Use of the SHA-256 Algorithm with RSA, Digital Signature Algorithm (DSA), and Elliptic Curve DSA (ECDSA) in SSHFP Resource Records
- RFC 7479[6] – Using Ed25519 in SSHFP Resource Records
- Article de Stéphane Bortzmeyer - RFC 4255[4]: Using DNS to Securely Publish Secure Shell (SSH) Key Fingerprints
- Article de Stéphane Bortzmeyer - RFC 7479[6]: Using ED25519 in SSHFP Resource Records
Notes et références
- (en) Request for comments no 7479.
- (en) Request for comments no 6594.
- man ssh_config
- (en) Request for comments no 4255.
- (en) Request for comments no 6594.
- (en) Request for comments no 7479.
- Portail d’Internet