Qué es un registro TLSA
Aprende cómo los registros TLSA habilitan DANE para la autenticación de certificados, proporcionando una alternativa a la validación CA tradicional. Incluye ejemplos para el panel de DNScale y la API.
Un registro TLSA (Transport Layer Security Authentication) asocia un certificado TLS de servidor o clave pública con un nombre de dominio, habilitando DANE (DNS-based Authentication of Named Entities). Los registros TLSA proporcionan una alternativa o complemento a la validación tradicional mediante Autoridad de Certificación.
Cómo funcionan los registros TLSA
Los registros TLSA especifican qué certificado o clave debe esperar un cliente al conectarse vía TLS:
_443._tcp.example.com. 3600 TLSA 3 1 1 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855Esto indica a los clientes: "Al conectar con example.com en el puerto 443 vía TCP, espera un certificado que coincida con este hash SHA-256."
Componentes del registro
| Componente | Campo | Descripción |
|---|---|---|
| Nombre | _puerto._protocolo.dominio | _443._tcp.example.com |
| Uso | Tipo de uso de certificado | 0, 1, 2 o 3 |
| Selector | Qué comparar | 0 (certificado completo) o 1 (clave pública) |
| Tipo de coincidencia | Algoritmo hash | 0 (exacto), 1 (SHA-256), 2 (SHA-512) |
| Datos del certificado | Hash o certificado | Datos codificados en hexadecimal |
Valores de uso
| Valor | Nombre | Descripción |
|---|---|---|
0 | PKIX-TA | Debe encadenar a la CA especificada + pasar validación PKIX |
1 | PKIX-EE | El certificado de entidad final debe coincidir + pasar validación PKIX |
2 | DANE-TA | Debe encadenar al ancla de confianza especificada (sin PKIX) |
3 | DANE-EE | El certificado de entidad final debe coincidir exactamente (sin PKIX) |
Valores de selector
| Valor | Nombre | Descripción |
|---|---|---|
0 | Cert | Coincidir con certificado completo |
1 | SPKI | Coincidir con SubjectPublicKeyInfo (solo clave pública) |
Valores de tipo de coincidencia
| Valor | Nombre | Descripción |
|---|---|---|
0 | Completo | Coincidencia exacta (datos completos, sin hash) |
1 | SHA-256 | Hash SHA-256 de los datos seleccionados |
2 | SHA-512 | Hash SHA-512 de los datos seleccionados |
Casos de uso comunes
Servidor web DANE-EE (Recomendado)
Validación auto-firmada mediante DNS:
_443._tcp.example.com. 3600 TLSA 3 1 1 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855Uso 3 + Selector 1 + SHA-256 es la configuración más común.
Servidor de correo (SMTP)
Entrega segura de correo con DANE:
_25._tcp.mail.example.com. 3600 TLSA 3 1 1 abc123...
_465._tcp.mail.example.com. 3600 TLSA 3 1 1 abc123...
_587._tcp.mail.example.com. 3600 TLSA 3 1 1 abc123...Servidor XMPP
_5222._tcp.xmpp.example.com. 3600 TLSA 3 1 1 def456...
_5269._tcp.xmpp.example.com. 3600 TLSA 3 1 1 def456...Múltiples certificados (Rotación)
Durante la renovación de certificados:
_443._tcp.example.com. 3600 TLSA 3 1 1 oldcerthash...
_443._tcp.example.com. 3600 TLSA 3 1 1 newcerthash...Formato del registro
| Campo | Descripción | Ejemplo |
|---|---|---|
| Nombre | _puerto._protocolo.dominio | _443._tcp.example.com |
| Tipo | Tipo de registro | TLSA |
| Uso | Uso del certificado | 3 |
| Selector | Datos a comparar | 1 |
| Tipo de coincidencia | Tipo de hash | 1 |
| Datos del certificado | Hash (hex) | e3b0c44... |
| TTL | Tiempo de vida (segundos) | 3600 |
Generar datos TLSA
Usando OpenSSL
Obtener hash SHA-256 de clave pública (selector=1, matching=1):
# Desde archivo de certificado
openssl x509 -in cert.pem -noout -pubkey | \
openssl pkey -pubin -outform DER | \
openssl dgst -sha256 -binary | \
xxd -p -c 256
# Desde servidor en producción
echo | openssl s_client -connect example.com:443 2>/dev/null | \
openssl x509 -noout -pubkey | \
openssl pkey -pubin -outform DER | \
openssl dgst -sha256 -binary | \
xxd -p -c 256Obtener hash SHA-256 del certificado completo (selector=0, matching=1):
openssl x509 -in cert.pem -outform DER | \
openssl dgst -sha256 -binary | \
xxd -p -c 256Usando ldns-dane
ldns-dane create example.com 443 3 1 1Añadir un registro TLSA
Usando el panel de control
- Navega a tu zona en el panel de DNScale
- Haz clic en Add Record
- Configura el registro:
- Name: Introduce
_443._tcp(o el puerto/protocolo apropiado) - Type: Selecciona
TLSA - Usage: Selecciona el uso del certificado (0-3)
- Selector: Elige Certificado completo (0) o Clave pública (1)
- Matching Type: Elige SHA-256 (1) o SHA-512 (2)
- Certificate Data: Introduce el hash codificado en hexadecimal
- TTL: Establece la duración de caché (por defecto: 3600)
- Name: Introduce
- Haz clic en Create Record
Usando la API
Crear un registro TLSA:
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": "_443._tcp",
"type": "TLSA",
"content": "3 1 1 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"ttl": 3600
}'Crear TLSA para servidor de correo:
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": "_25._tcp.mail",
"type": "TLSA",
"content": "3 1 1 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"ttl": 3600
}'Respuesta de la API:
{
"status": "success",
"data": {
"message": "Record created successfully",
"record": {
"id": "encoded-record-id",
"name": "_443._tcp.example.com.",
"type": "TLSA",
"content": "3 1 1 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"ttl": 3600,
"disabled": false
}
}
}Requisitos de DANE
Para que DANE funcione, tu zona debe:
- Estar firmada con DNSSEC - Los registros TLSA sin DNSSEC no proporcionan beneficio de seguridad
- Tener registros TLSA correctos - El hash debe coincidir con el certificado/clave real
- Actualizar registros durante la rotación de certificados - Añadir el nuevo hash antes de desplegar el nuevo certificado
Proceso de rotación de certificados
- Generar nuevo certificado
- Añadir registro TLSA para el hash del nuevo certificado
- Esperar la propagación DNS (al menos la duración del TTL)
- Desplegar nuevo certificado en el servidor
- Eliminar registro TLSA antiguo
# Paso 2: Añadir nuevo hash manteniendo el antiguo
_443._tcp.example.com. 3600 TLSA 3 1 1 oldhash...
_443._tcp.example.com. 3600 TLSA 3 1 1 newhash...
# Paso 5: Eliminar hash antiguo
_443._tcp.example.com. 3600 TLSA 3 1 1 newhash...Mejores prácticas
-
Usar DANE-EE (uso 3) - La más sencilla y comúnmente desplegada
-
Usar selector 1 (SPKI) - Sobrevive a la renovación de certificados si se reutiliza la clave
-
Usar SHA-256 (tipo de coincidencia 1) - Estándar y ampliamente soportado
-
Publicar antes de desplegar - Añadir registros TLSA antes de desplegar nuevos certificados
-
Habilitar DNSSEC primero - TLSA sin DNSSEC es inseguro
-
Mantener múltiples registros durante la rotación - Prevenir interrupciones del servicio
Probar registros TLSA
# Consultar registro TLSA
dig TLSA _443._tcp.example.com
# Verificar con ldns
ldns-dane verify example.com 443
# Herramientas online
# - https://dane.sys4.de/
# - https://internet.nl/Tipos de registro relacionados
- CAA - Autorización de autoridad de certificación
- TXT - Verificación de dominio
- SSHFP - Huellas digitales SSH (concepto similar)
Conclusión
Los registros TLSA habilitan DANE, proporcionando validación de certificados basada en DNS que puede complementar o reemplazar la verificación CA tradicional. Combinados con DNSSEC, los registros TLSA ofrecen una protección sólida contra ataques de intermediario (man-in-the-middle). La interfaz intuitiva de DNScale facilita la configuración de registros TLSA, con campos dedicados para los parámetros de uso, selector y tipo de coincidencia.