Cos'è un record SSHFP
Scopri come i record SSHFP pubblicano le fingerprint delle chiavi host SSH nel DNS per la verifica del server. Include esempi per la dashboard e l'API di DNScale.
Un record SSHFP (SSH Fingerprint) pubblica la fingerprint della chiave host di un server SSH nel DNS. Questo consente ai client SSH di verificare l'identità di un server tramite il DNS invece di affidarsi esclusivamente al modello "trust on first use" (TOFU).
Come funzionano i record SSHFP
Quando ti connetti per la prima volta a un server SSH, vedi un messaggio come:
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)?I record SSHFP eliminano questa incertezza pubblicando la fingerprint attesa nel DNS:
server.example.com. 3600 SSHFP 4 2 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855I client SSH configurati per usare SSHFP verificheranno automaticamente la chiave del server confrontandola con il DNS.
Componenti del record
| Componente | Descrizione |
|---|---|
| Algoritmo | Tipo di algoritmo della chiave SSH |
| Tipo di fingerprint | Algoritmo di hash utilizzato |
| Fingerprint | Fingerprint codificata in esadecimale |
Valori dell'algoritmo
| Valore | Algoritmo |
|---|---|
1 | RSA |
2 | DSA (deprecato) |
3 | ECDSA |
4 | Ed25519 |
6 | Ed448 |
Valori del tipo di fingerprint
| Valore | Algoritmo di hash |
|---|---|
1 | SHA-1 (deprecato) |
2 | SHA-256 (consigliato) |
Casi d'uso comuni
Server SSH singolo
Pubblica tutti i tipi di chiave per una copertura completa:
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... ; Ed25519Server multipli
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/Jump host
bastion.example.com. 3600 SSHFP 4 2 abc123...
bastion.example.com. 3600 SSHFP 3 2 def456...Formato del record
| Campo | Descrizione | Esempio |
|---|---|---|
| Nome | Hostname del server | server.example.com |
| Tipo | Tipo di record | SSHFP |
| Algoritmo | Algoritmo della chiave | 4 (Ed25519) |
| Tipo FP | Tipo di hash | 2 (SHA-256) |
| Fingerprint | Fingerprint esadecimale | e3b0c44... |
| TTL | Time to live (secondi) | 3600 |
Generazione dei record SSHFP
Utilizzando ssh-keygen
Il metodo più semplice è ssh-keygen -r:
# Genera i record SSHFP per tutte le chiavi host
ssh-keygen -r server.example.com
# Output:
# 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)Da server remoto
# Ottieni la fingerprint da un server remoto
ssh-keyscan server.example.com | ssh-keygen -r server.example.com -f /dev/stdinCalcolo manuale
# Per un file chiave specifico
awk '{print $2}' /etc/ssh/ssh_host_ed25519_key.pub | \
base64 -d | \
sha256sum | \
awk '{print $1}'Aggiungere un record SSHFP
Tramite la dashboard
- Naviga alla tua zona nella dashboard di DNScale
- Clicca su Add Record
- Configura il record:
- Name: Inserisci l'hostname del server (es.
server) - Type: Seleziona
SSHFP - Algorithm: Seleziona l'algoritmo della chiave (RSA, ECDSA, Ed25519)
- Fingerprint Type: Seleziona SHA-256 (consigliato)
- Fingerprint: Inserisci la fingerprint codificata in esadecimale
- TTL: Imposta la durata della cache (predefinito: 3600)
- Name: Inserisci l'hostname del server (es.
- Clicca su Create Record
Tramite l'API
Creare un record 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
}'Aggiungere tipi di chiave multipli:
# Chiave 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
}'
# Chiave 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
}'Risposta 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
}
}
}Configurazione del client SSH
Per abilitare la verifica SSHFP, configura il tuo client SSH:
~/.ssh/config
Host *.example.com
VerifyHostKeyDNS yesRiga di comando
ssh -o VerifyHostKeyDNS=yes server.example.comLivelli di verifica
| Impostazione | Comportamento |
|---|---|
yes | Verifica con SSHFP, avvisa se mancante |
ask | Verifica con SSHFP, chiede all'utente se mancante |
no | Non usa SSHFP (predefinito) |
Requisito DNSSEC
Affinché SSHFP fornisca vera sicurezza, la tua zona deve essere firmata con DNSSEC:
- Con DNSSEC: SSHFP fornisce prova crittografica dell'identità del server
- Senza DNSSEC: SSHFP è solo informativo (il DNS può essere falsificato)
Controlla lo stato DNSSEC:
dig +dnssec server.example.com SSHFPBest practice
-
Usa SHA-256 - Utilizza sempre il tipo di fingerprint
2(SHA-256), non SHA-1 -
Pubblica tutti i tipi di chiave - Aggiungi record SSHFP per tutte le chiavi host offerte dal tuo server
-
Abilita DNSSEC - Senza DNSSEC, SSHFP fornisce un beneficio di sicurezza limitato
-
Aggiorna alla rotazione delle chiavi - Quando rigeneri le chiavi host, aggiorna i record SSHFP
-
Usa chiavi Ed25519 - Moderne, sicure e producono fingerprint più brevi
-
Automatizza la generazione dei record - Includi la creazione dei record SSHFP nel provisioning del server
Rotazione delle chiavi host
Quando si ruotano le chiavi host SSH:
- Genera le nuove chiavi sul server
- Aggiungi i nuovi record SSHFP
- Attendi la propagazione DNS (almeno la durata del TTL)
- Sostituisci le chiavi sul server
- Rimuovi i vecchi record SSHFP
# Passo 1: Genera le nuove chiavi
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key_new -N ""
# Passo 2-3: Aggiungi il nuovo SSHFP e attendi
# Passo 4: Sostituisci le chiavi
mv /etc/ssh/ssh_host_ed25519_key_new /etc/ssh/ssh_host_ed25519_key
systemctl reload sshd
# Passo 5: Rimuovi i vecchi record SSHFPTest dei record SSHFP
# Query dei record SSHFP
dig SSHFP server.example.com
# Verifica la connessione SSH con SSHFP
ssh -v -o VerifyHostKeyDNS=yes server.example.com
# Confronta la fingerprint locale con il DNS
ssh-keygen -r server.example.comTipi di record correlati
- TLSA - Fingerprint dei certificati TLS (concetto simile)
- A - Indirizzo IP del server
- AAAA - Indirizzo IPv6 del server
Conclusione
I record SSHFP forniscono un metodo basato sul DNS per la verifica delle chiavi host SSH, riducendo la dipendenza dal modello "trust on first use". Combinati con DNSSEC, gli SSHFP offrono una prova crittografica forte dell'identità del server. DNScale semplifica la pubblicazione dei record SSHFP per i tuoi server, con campi dedicati per la selezione dell'algoritmo e del tipo di fingerprint.