Was ist ein SSHFP-Eintrag
Erfahren Sie, wie SSHFP-Einträge SSH-Host-Key-Fingerprints im DNS veröffentlichen, um die Serververifizierung zu ermöglichen. Mit Beispielen für das DNScale-Dashboard und die API.
Ein SSHFP-Eintrag (SSH Fingerprint) veröffentlicht den Fingerprint eines SSH-Server-Host-Keys im DNS. Dies ermöglicht es SSH-Clients, die Identität eines Servers über DNS zu verifizieren, anstatt sich ausschließlich auf das „Trust on First Use" (TOFU)-Modell zu verlassen.
Wie SSHFP-Einträge funktionieren
Wenn Sie sich zum ersten Mal mit einem SSH-Server verbinden, sehen Sie eine Meldung wie:
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)?SSHFP-Einträge beseitigen diese Unsicherheit, indem sie den erwarteten Fingerprint im DNS veröffentlichen:
server.example.com. 3600 SSHFP 4 2 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855SSH-Clients, die für die Nutzung von SSHFP konfiguriert sind, verifizieren den Schlüssel des Servers automatisch gegen den DNS-Eintrag.
Eintragskomponenten
| Komponente | Beschreibung |
|---|---|
| Algorithm | SSH-Schlüssel-Algorithmustyp |
| Fingerprint Type | Verwendeter Hash-Algorithmus |
| Fingerprint | Hex-kodierter Fingerprint |
Algorithmus-Werte
| Wert | Algorithmus |
|---|---|
1 | RSA |
2 | DSA (veraltet) |
3 | ECDSA |
4 | Ed25519 |
6 | Ed448 |
Fingerprint-Typ-Werte
| Wert | Hash-Algorithmus |
|---|---|
1 | SHA-1 (veraltet) |
2 | SHA-256 (empfohlen) |
Häufige Anwendungsfälle
Einzelner SSH-Server
Veröffentlichen Sie alle Schlüsseltypen für umfassende Abdeckung:
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... ; Ed25519Mehrere Server
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...Eintragsformat
| Feld | Beschreibung | Beispiel |
|---|---|---|
| Name | Server-Hostname | server.example.com |
| Typ | Eintragstyp | SSHFP |
| Algorithm | Schlüsselalgorithmus | 4 (Ed25519) |
| FP Type | Hash-Typ | 2 (SHA-256) |
| Fingerprint | Hex-Fingerprint | e3b0c44... |
| TTL | Gültigkeitsdauer (Sekunden) | 3600 |
SSHFP-Einträge generieren
Mit ssh-keygen
Die einfachste Methode ist ssh-keygen -r:
# SSHFP-Einträge für alle Host-Keys generieren
ssh-keygen -r server.example.com
# Ausgabe:
# 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)Vom Remote-Server
# Fingerprint vom Remote-Server abrufen
ssh-keyscan server.example.com | ssh-keygen -r server.example.com -f /dev/stdinManuelle Berechnung
# Für eine bestimmte Schlüsseldatei
awk '{print $2}' /etc/ssh/ssh_host_ed25519_key.pub | \
base64 -d | \
sha256sum | \
awk '{print $1}'SSHFP-Eintrag hinzufügen
Über das Dashboard
- Navigieren Sie zu Ihrer Zone im DNScale-Dashboard
- Klicken Sie auf Add Record
- Konfigurieren Sie den Eintrag:
- Name: Geben Sie den Server-Hostnamen ein (z. B.
server) - Type: Wählen Sie
SSHFP - Algorithm: Wählen Sie den Schlüsselalgorithmus (RSA, ECDSA, Ed25519)
- Fingerprint Type: Wählen Sie SHA-256 (empfohlen)
- Fingerprint: Geben Sie den hex-kodierten Fingerprint ein
- TTL: Setzen Sie die Cache-Dauer (Standard: 3600)
- Name: Geben Sie den Server-Hostnamen ein (z. B.
- Klicken Sie auf Create Record
Über die API
SSHFP-Eintrag erstellen:
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
}'Mehrere Schlüsseltypen hinzufügen:
# Ed25519-Schlüssel
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
}'
# ECDSA-Schlüssel
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
}'API-Antwort:
{
"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
}
}
}SSH-Client konfigurieren
Um die SSHFP-Verifizierung zu aktivieren, konfigurieren Sie Ihren SSH-Client:
~/.ssh/config
Host *.example.com
VerifyHostKeyDNS yesKommandozeile
ssh -o VerifyHostKeyDNS=yes server.example.comVerifizierungsstufen
| Einstellung | Verhalten |
|---|---|
yes | Mit SSHFP verifizieren, warnen wenn fehlend |
ask | Mit SSHFP verifizieren, Benutzer fragen wenn fehlend |
no | SSHFP nicht verwenden (Standard) |
DNSSEC-Voraussetzung
Damit SSHFP echte Sicherheit bietet, muss Ihre Zone DNSSEC-signiert sein:
- Mit DNSSEC: SSHFP liefert kryptografischen Beweis der Serveridentität
- Ohne DNSSEC: SSHFP ist nur informativ (DNS kann gefälscht werden)
DNSSEC-Status prüfen:
dig +dnssec server.example.com SSHFPBest Practices
-
SHA-256 verwenden - Verwenden Sie immer Fingerprint-Typ
2(SHA-256), nicht SHA-1 -
Alle Schlüsseltypen veröffentlichen - Fügen Sie SSHFP-Einträge für alle Host-Keys hinzu, die Ihr Server anbietet
-
DNSSEC aktivieren - Ohne DNSSEC bietet SSHFP nur begrenzten Sicherheitsvorteil
-
Bei Schlüsselrotation aktualisieren - Wenn Sie Host-Keys neu generieren, aktualisieren Sie die SSHFP-Einträge
-
Ed25519-Schlüssel verwenden - Modern, sicher und erzeugt kürzere Fingerprints
-
Eintragserstellung automatisieren - Integrieren Sie die SSHFP-Eintragserstellung in die Server-Bereitstellung
Host-Key-Rotation
Bei der Rotation von SSH-Host-Keys:
- Neue Schlüssel auf dem Server generieren
- Neue SSHFP-Einträge hinzufügen
- Auf DNS-Propagierung warten (mindestens die TTL-Dauer)
- Schlüssel auf dem Server ersetzen
- Alte SSHFP-Einträge entfernen
# Schritt 1: Neue Schlüssel generieren
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key_new -N ""
# Schritt 2-3: Neuen SSHFP hinzufügen und warten
# Schritt 4: Schlüssel ersetzen
mv /etc/ssh/ssh_host_ed25519_key_new /etc/ssh/ssh_host_ed25519_key
systemctl reload sshd
# Schritt 5: Alte SSHFP-Einträge entfernenSSHFP-Einträge testen
# SSHFP-Einträge abfragen
dig SSHFP server.example.com
# SSH-Verbindung mit SSHFP verifizieren
ssh -v -o VerifyHostKeyDNS=yes server.example.com
# Lokalen Fingerprint mit DNS vergleichen
ssh-keygen -r server.example.comVerwandte Eintragstypen
- TLSA - TLS-Zertifikats-Fingerprints (ähnliches Konzept)
- A - Server-IP-Adresse
- AAAA - Server-IPv6-Adresse
Fazit
SSHFP-Einträge bieten eine DNS-basierte Methode zur SSH-Host-Key-Verifizierung und verringern die Abhängigkeit vom „Trust on First Use"-Modell. In Kombination mit DNSSEC bietet SSHFP einen starken kryptografischen Beweis der Serveridentität. DNScale macht es einfach, SSHFP-Einträge für Ihre Server zu veröffentlichen, mit dedizierten Feldern für Algorithmus- und Fingerprint-Typ-Auswahl.