Découvrez PostScale -- API e-mail pour l'envoi transactionnel, la réception et les adresses masquées. PostScale

    Qu'est-ce qu'un enregistrement SSHFP

    Découvrez comment les enregistrements SSHFP publient les empreintes de clés hôte SSH dans le DNS pour la vérification des serveurs. Inclut des exemples pour le tableau de bord et l'API DNScale.

    Un enregistrement SSHFP (SSH Fingerprint) publie l'empreinte de la clé hôte d'un serveur SSH dans le DNS. Cela permet aux clients SSH de vérifier l'identité d'un serveur via le DNS au lieu de se fier uniquement au modèle « trust on first use » (TOFU — confiance à la première utilisation).

    Comment fonctionnent les enregistrements SSHFP

    Lorsque vous vous connectez pour la première fois à un serveur SSH, vous voyez un message comme :

    The authenticity of host 'server.example.com' can't be established.
    ED25519 key fingerprint is SHA256:abc123...
    Are you sure you want to continue connecting (yes/no)?

    Les enregistrements SSHFP éliminent cette incertitude en publiant l'empreinte attendue dans le DNS :

    server.example.com.    3600    SSHFP    4 2 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

    Les clients SSH configurés pour utiliser SSHFP vérifieront automatiquement la clé du serveur par rapport au DNS.

    Composants de l'enregistrement

    ComposantDescription
    AlgorithmeType d'algorithme de clé SSH
    Type d'empreinteAlgorithme de hash utilisé
    EmpreinteEmpreinte encodée en hexadécimal

    Valeurs d'algorithme

    ValeurAlgorithme
    1RSA
    2DSA (obsolète)
    3ECDSA
    4Ed25519
    6Ed448

    Valeurs du type d'empreinte

    ValeurAlgorithme de hash
    1SHA-1 (obsolète)
    2SHA-256 (recommandé)

    Cas d'utilisation courants

    Serveur SSH unique

    Publiez tous les types de clés pour une couverture complète :

    server.example.com.    3600    SSHFP    1 2 abc123...  ; RSA
    server.example.com.    3600    SSHFP    3 2 def456...  ; ECDSA
    server.example.com.    3600    SSHFP    4 2 ghi789...  ; Ed25519

    Plusieurs serveurs

    server1.example.com.    3600    SSHFP    4 2 hash1...
    server2.example.com.    3600    SSHFP    4 2 hash2...
    git.example.com.        3600    SSHFP    4 2 hash3...

    Bastion / hôte de rebond

    bastion.example.com.    3600    SSHFP    4 2 abc123...
    bastion.example.com.    3600    SSHFP    3 2 def456...

    Format de l'enregistrement

    ChampDescriptionExemple
    NomNom d'hôte du serveurserver.example.com
    TypeType d'enregistrementSSHFP
    AlgorithmeAlgorithme de clé4 (Ed25519)
    Type d'empreinteType de hash2 (SHA-256)
    EmpreinteEmpreinte hexadécimalee3b0c44...
    TTLDurée de vie (secondes)3600

    Générer des enregistrements SSHFP

    Avec ssh-keygen

    La méthode la plus simple est ssh-keygen -r :

    # Générer les enregistrements SSHFP pour toutes les clés hôte
    ssh-keygen -r server.example.com
     
    # Sortie :
    # server.example.com IN SSHFP 1 2 abc123...  (RSA)
    # server.example.com IN SSHFP 3 2 def456...  (ECDSA)
    # server.example.com IN SSHFP 4 2 ghi789...  (Ed25519)

    Depuis un serveur distant

    # Obtenir l'empreinte depuis un serveur distant
    ssh-keyscan server.example.com | ssh-keygen -r server.example.com -f /dev/stdin

    Calcul manuel

    # Pour un fichier de clé spécifique
    awk '{print $2}' /etc/ssh/ssh_host_ed25519_key.pub | \
      base64 -d | \
      sha256sum | \
      awk '{print $1}'

    Ajouter un enregistrement SSHFP

    Via le tableau de bord

    1. Accédez à votre zone dans le tableau de bord DNScale
    2. Cliquez sur Add Record
    3. Configurez l'enregistrement :
      • Name : Saisissez le nom d'hôte du serveur (ex. server)
      • Type : Sélectionnez SSHFP
      • Algorithm : Sélectionnez l'algorithme de clé (RSA, ECDSA, Ed25519)
      • Fingerprint Type : Sélectionnez SHA-256 (recommandé)
      • Fingerprint : Saisissez l'empreinte encodée en hexadécimal
      • TTL : Définissez la durée de cache (par défaut : 3600)
    4. Cliquez sur Create Record

    Via l'API

    Créer un enregistrement SSHFP :

    curl -X POST "https://api.dnscale.eu/v1/zones/{zone_id}/records" \
      -H "Authorization: Bearer YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "server",
        "type": "SSHFP",
        "content": "4 2 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
        "ttl": 3600
      }'

    Ajouter plusieurs types de clés :

    # Clé Ed25519
    curl -X POST "https://api.dnscale.eu/v1/zones/{zone_id}/records" \
      -H "Authorization: Bearer YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "server",
        "type": "SSHFP",
        "content": "4 2 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
        "ttl": 3600
      }'
     
    # Clé ECDSA
    curl -X POST "https://api.dnscale.eu/v1/zones/{zone_id}/records" \
      -H "Authorization: Bearer YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "server",
        "type": "SSHFP",
        "content": "3 2 abc123def456789...",
        "ttl": 3600
      }'

    Réponse de l'API :

    {
      "status": "success",
      "data": {
        "message": "Record created successfully",
        "record": {
          "id": "encoded-record-id",
          "name": "server.example.com.",
          "type": "SSHFP",
          "content": "4 2 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
          "ttl": 3600,
          "disabled": false
        }
      }
    }

    Configurer le client SSH

    Pour activer la vérification SSHFP, configurez votre client SSH :

    ~/.ssh/config

    Host *.example.com
        VerifyHostKeyDNS yes

    Ligne de commande

    ssh -o VerifyHostKeyDNS=yes server.example.com

    Niveaux de vérification

    ParamètreComportement
    yesVérifier avec SSHFP, avertir si absent
    askVérifier avec SSHFP, demander à l'utilisateur si absent
    noNe pas utiliser SSHFP (par défaut)

    Prérequis DNSSEC

    Pour que SSHFP offre une vraie sécurité, votre zone doit être signée DNSSEC :

    • Avec DNSSEC : SSHFP fournit une preuve cryptographique de l'identité du serveur
    • Sans DNSSEC : SSHFP est uniquement informatif (le DNS peut être usurpé)

    Vérifier le statut DNSSEC :

    dig +dnssec server.example.com SSHFP

    Bonnes pratiques

    1. Utilisez SHA-256 - Utilisez toujours le type d'empreinte 2 (SHA-256), pas SHA-1

    2. Publiez tous les types de clés - Ajoutez des enregistrements SSHFP pour toutes les clés hôte que votre serveur propose

    3. Activez DNSSEC - Sans DNSSEC, SSHFP n'offre qu'un bénéfice de sécurité limité

    4. Mettez à jour lors de la rotation des clés - Lorsque vous regénérez les clés hôte, mettez à jour les enregistrements SSHFP

    5. Utilisez les clés Ed25519 - Modernes, sécurisées et produisent des empreintes plus courtes

    6. Automatisez la génération des enregistrements - Incluez la création d'enregistrements SSHFP dans le provisionnement des serveurs

    Rotation des clés hôte

    Lors de la rotation des clés hôte SSH :

    1. Générer les nouvelles clés sur le serveur
    2. Ajouter les nouveaux enregistrements SSHFP
    3. Attendre la propagation DNS (au moins la durée du TTL)
    4. Remplacer les clés sur le serveur
    5. Supprimer les anciens enregistrements SSHFP
    # Étape 1 : Générer les nouvelles clés
    ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key_new -N ""
     
    # Étapes 2-3 : Ajouter le nouveau SSHFP et attendre
     
    # Étape 4 : Remplacer les clés
    mv /etc/ssh/ssh_host_ed25519_key_new /etc/ssh/ssh_host_ed25519_key
    systemctl reload sshd
     
    # Étape 5 : Supprimer les anciens enregistrements SSHFP

    Tester les enregistrements SSHFP

    # Requête des enregistrements SSHFP
    dig SSHFP server.example.com
     
    # Vérifier la connexion SSH avec SSHFP
    ssh -v -o VerifyHostKeyDNS=yes server.example.com
     
    # Comparer l'empreinte locale avec le DNS
    ssh-keygen -r server.example.com

    Types d'enregistrements associés

    • TLSA - Empreintes de certificats TLS (concept similaire)
    • A - Adresse IP du serveur
    • AAAA - Adresse IPv6 du serveur

    Conclusion

    Les enregistrements SSHFP fournissent une méthode basée sur le DNS pour la vérification des clés hôte SSH, réduisant la dépendance au modèle « trust on first use ». Combinés avec DNSSEC, les enregistrements SSHFP offrent une preuve cryptographique solide de l'identité du serveur. DNScale facilite la publication des enregistrements SSHFP pour vos serveurs, avec des champs dédiés pour la sélection de l'algorithme et du type d'empreinte.