Qué es un registro SSHFP
Aprende cómo los registros SSHFP publican huellas digitales de claves de host SSH en DNS para la verificación de servidores. Incluye ejemplos para el panel de DNScale y la API.
Un registro SSHFP (SSH Fingerprint) publica la huella digital de la clave de host de un servidor SSH en DNS. Esto permite a los clientes SSH verificar la identidad de un servidor a través de DNS en lugar de depender únicamente del modelo "confiar en el primer uso" (TOFU).
Cómo funcionan los registros SSHFP
Cuando te conectas por primera vez a un servidor SSH, ves un mensaje como:
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)?Los registros SSHFP eliminan esta incertidumbre publicando la huella digital esperada en DNS:
server.example.com. 3600 SSHFP 4 2 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855Los clientes SSH configurados para usar SSHFP verificarán la clave del servidor contra DNS automáticamente.
Componentes del registro
| Componente | Descripción |
|---|---|
| Algoritmo | Tipo de algoritmo de clave SSH |
| Tipo de huella | Algoritmo hash utilizado |
| Huella digital | Huella codificada en hexadecimal |
Valores de algoritmo
| Valor | Algoritmo |
|---|---|
1 | RSA |
2 | DSA (obsoleto) |
3 | ECDSA |
4 | Ed25519 |
6 | Ed448 |
Valores de tipo de huella
| Valor | Algoritmo hash |
|---|---|
1 | SHA-1 (obsoleto) |
2 | SHA-256 (recomendado) |
Casos de uso comunes
Servidor SSH único
Publica todos los tipos de clave para cobertura 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... ; Ed25519Múltiples servidores
server1.example.com. 3600 SSHFP 4 2 hash1...
server2.example.com. 3600 SSHFP 4 2 hash2...
git.example.com. 3600 SSHFP 4 2 hash3...Host bastión/salto
bastion.example.com. 3600 SSHFP 4 2 abc123...
bastion.example.com. 3600 SSHFP 3 2 def456...Formato del registro
| Campo | Descripción | Ejemplo |
|---|---|---|
| Nombre | Nombre de host del servidor | server.example.com |
| Tipo | Tipo de registro | SSHFP |
| Algoritmo | Algoritmo de clave | 4 (Ed25519) |
| Tipo FP | Tipo de hash | 2 (SHA-256) |
| Huella | Huella hexadecimal | e3b0c44... |
| TTL | Tiempo de vida (segundos) | 3600 |
Generar registros SSHFP
Usando ssh-keygen
El método más sencillo es ssh-keygen -r:
# Generar registros SSHFP para todas las claves de host
ssh-keygen -r server.example.com
# Salida:
# 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)Desde servidor remoto
# Obtener huella desde servidor remoto
ssh-keyscan server.example.com | ssh-keygen -r server.example.com -f /dev/stdinCálculo manual
# Para un archivo de clave específico
awk '{print $2}' /etc/ssh/ssh_host_ed25519_key.pub | \
base64 -d | \
sha256sum | \
awk '{print $1}'Añadir un registro SSHFP
Usando el panel de control
- Navega a tu zona en el panel de DNScale
- Haz clic en Add Record
- Configura el registro:
- Name: Introduce el nombre de host del servidor (ej.,
server) - Type: Selecciona
SSHFP - Algorithm: Selecciona el algoritmo de clave (RSA, ECDSA, Ed25519)
- Fingerprint Type: Selecciona SHA-256 (recomendado)
- Fingerprint: Introduce la huella codificada en hexadecimal
- TTL: Establece la duración de caché (por defecto: 3600)
- Name: Introduce el nombre de host del servidor (ej.,
- Haz clic en Create Record
Usando la API
Crear un registro 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
}'Añadir múltiples tipos de clave:
# Clave 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
}'
# Clave 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
}'Respuesta de la 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
}
}
}Configurar el cliente SSH
Para habilitar la verificación SSHFP, configura tu cliente SSH:
~/.ssh/config
Host *.example.com
VerifyHostKeyDNS yesLínea de comandos
ssh -o VerifyHostKeyDNS=yes server.example.comNiveles de verificación
| Configuración | Comportamiento |
|---|---|
yes | Verificar con SSHFP, advertir si falta |
ask | Verificar con SSHFP, preguntar al usuario si falta |
no | No usar SSHFP (por defecto) |
Requisito de DNSSEC
Para que SSHFP proporcione seguridad real, tu zona debe estar firmada con DNSSEC:
- Con DNSSEC: SSHFP proporciona prueba criptográfica de la identidad del servidor
- Sin DNSSEC: SSHFP es solo informativo (el DNS puede ser suplantado)
Verificar el estado de DNSSEC:
dig +dnssec server.example.com SSHFPMejores prácticas
-
Usar SHA-256 - Siempre usar tipo de huella
2(SHA-256), no SHA-1 -
Publicar todos los tipos de clave - Añadir registros SSHFP para todas las claves de host que ofrece tu servidor
-
Habilitar DNSSEC - Sin DNSSEC, SSHFP proporciona un beneficio de seguridad limitado
-
Actualizar en rotación de claves - Cuando regeneres claves de host, actualiza los registros SSHFP
-
Usar claves Ed25519 - Modernas, seguras y producen huellas más cortas
-
Automatizar la generación de registros - Incluye la creación de registros SSHFP en el aprovisionamiento de servidores
Rotación de claves de host
Al rotar claves de host SSH:
- Generar nuevas claves en el servidor
- Añadir nuevos registros SSHFP
- Esperar la propagación DNS (al menos la duración del TTL)
- Reemplazar las claves en el servidor
- Eliminar los registros SSHFP antiguos
# Paso 1: Generar nuevas claves
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key_new -N ""
# Paso 2-3: Añadir nuevo SSHFP y esperar
# Paso 4: Reemplazar claves
mv /etc/ssh/ssh_host_ed25519_key_new /etc/ssh/ssh_host_ed25519_key
systemctl reload sshd
# Paso 5: Eliminar registros SSHFP antiguosProbar registros SSHFP
# Consultar registros SSHFP
dig SSHFP server.example.com
# Verificar conexión SSH con SSHFP
ssh -v -o VerifyHostKeyDNS=yes server.example.com
# Comparar huella local con DNS
ssh-keygen -r server.example.comTipos de registro relacionados
- TLSA - Huellas de certificados TLS (concepto similar)
- A - Dirección IP del servidor
- AAAA - Dirección IPv6 del servidor
Conclusión
Los registros SSHFP proporcionan un método basado en DNS para la verificación de claves de host SSH, reduciendo la dependencia del modelo "confiar en el primer uso". Combinados con DNSSEC, SSHFP ofrece una prueba criptográfica sólida de la identidad del servidor. DNScale facilita la publicación de registros SSHFP para tus servidores, con campos dedicados para la selección de algoritmo y tipo de huella.