Saltar al contenido
Roadmap

$ ssh lab-03-mtls-chain·M03 · L7

Servicios de Red, Resolución y Criptografía de Tránsito

10.0.3.0/24dns:53 · tls:443 · mtls

Objetivo: emitir CA efímera y probar mTLS.

Runtime: Linux, Bash, openssl

Comprensión0/5 lecciones
Práctica verificada0/2 checks
Empezar: El problema: llegar a una IP no prueba con quién hablaste~10 min

Lee el mecanismo; después interroga la evidencia.

La teoría define qué debe ocurrir. Las figuras y tablas reducen el mecanismo a señales observables; la topología y el inspector de paquete permiten comprobarlo después. Cada lección termina con «Lo entiendo»: márcala cuando puedas explicarla, no cuando la hayas leído.

Conceptos disponibles19

El problema: llegar a una IP no prueba con quién hablaste

Una aplicación puede resolver un nombre, abrir TCP y aun así estar conectándose al servicio equivocado. DNS responde “a qué IP intento ir”; TLS responde “qué clave e identidad presentó el peer”; mTLS añade “qué identidad presentó también el cliente”. Confundir esas respuestas conduce a atajos como desactivar la validación de certificado, que cifra el tráfico pero elimina la verificación del interlocutor. [1,2]

Al terminar podrás diagnosticar casos como: “DNS funciona y la TCP existe, pero el SAN del certificado no corresponde a api.internal; la conexión debe rechazarse”. Esa separación es la base de entre servicios.

¿La entiendes?

Márcala sólo si puedes explicarla con tus palabras y decir por qué importa en producción.

Mapa mínimo: nombre, camino e identidad son controles distintos

Flujo del mecanismo4 etapas

Nombre, camino e identidad

Resolver una IP no prueba la identidad del servicio.

intención

aplicación. Solicita un nombre y decide el destino esperado.

Ver la figura original
aplicación
   │ pregunta «¿dónde está api.internal?»
   ▼
DNS ── nombre → IP, TTL, tipo de respuesta
   │ abre conexión a esa IP
   ▼
TCP ── comprueba alcance y sesión
   │ negocia claves y presenta certificados
   ▼
TLS/mTLS ── ¿la identidad y el contexto están autorizados?

Aprende primero a no mezclar las capas. Un registro A correcto no autentica; selecciona un certificado pero tampoco autentica; una cadena válida no basta si el SAN no coincide con la identidad esperada. [1,2]

¿La entiendes?

Márcala sólo si puedes explicarla con tus palabras y decir por qué importa en producción.

Ruta de estudio y conexión con el roadmap

  1. Lee una respuesta DNS como estructura: nombre, tipo, TTL y RCODE.
  2. Separa resolución de establecimiento TCP.
  3. Recorre TLS 1.3 como negociación de secreto y prueba de identidad.
  4. Añade mTLS y política por /SAN para decidir quién puede llamar.

En Kubernetes, el módulo siguiente hará que esta misma conversación atraviese , Services, y NetworkPolicies: descubrir un no equivale a estar autorizado a usarlo.

Referencia técnica: DNS, TLS y mTLS

DNS usa /53; TCP/53 sirve transferencias, respuestas grandes/fallback. Cabecera: ID, QR/Opcode/AA/TC/RD/RA/RCODE, QD/AN/NS/AR. RR: NAME, TYPE, CLASS, TTL, RDLENGTH, RDATA. A entrega ; SRV prioridad/peso/puerto/target; TXT texto opaco. TTL permite cache, no autorización. [1]

TLS 1.3 negocia secreto efímero con ClientHello (SNI, ALPN, key share), ServerHello y mensajes cifrados. X.509 vincula clave/identidad: valide trust anchor, tiempo, SAN/hostname, key usage y revocación. SNI selecciona virtual host, no autentica.

mTLS exige certificado de ambos pares. Autorice URI SAN/SPIFFE ID concreta, no sólo cadena válida. emite/rota identidad; data plane decide por conexión. [2]

ElementoVerificaciónRiesgo
DNSRCODE, TTL, servidoregress por nombre no controlado
TLS servidorSAN/cadena/tiemposkip verify
TLS clienteCA/SAN workloadconfiar CA demasiado amplia
rotacióntrust bundle solapadocert permanente

Pulsa una fila para fijarla.

Referencia: no cuenta para tu progreso. Vuelve aquí cuando necesites un campo o un estado concreto.

DNS: una respuesta es una estructura, no sólo una IP

Cabecera DNS separa pregunta, respuesta, autoridad y adicional. QR distingue query/response; RD pide recursión; RA declara disponibilidad; AA indica respuesta autoritativa; RCODE comunica resultado. Resolver puede seguir CNAME/delegaciones y cachear respuestas o errores. Registre nombre, servidor, RCODE, TTL e IP final: una IP sola no explica resolución. [1]

Figura
Query: ID=0x4a11 RD=1 QNAME=api.internal QTYPE=A
Reply: ID=0x4a11 QR=1 RA=1 RCODE=NOERROR
       Answer: api.internal. 30 IN A 10.60.0.20
       Additional: _grpc._tcp.api.internal. 30 IN SRV 0 5 8443 api.internal.
ResultadoSignificadoError común
NXDOMAINnombre no existereintentar en resolver público
SERVFAILresolver no completóasumir fallo de aplicación
NOERROR sin Answerexiste, pero no ese tipoignorar QTYPE
TC=1truncado en UDPbloquear TCP/53

Pulsa una fila para fijarla.

DNS dirige conexión; no prueba identidad. Aún con IP correcta, TLS debe validar el peer y egress debe limitar resolver/destino. [3,2]

¿La entiendes?

Márcala sólo si puedes explicarla con tus palabras y decir por qué importa en producción.

TLS 1.3: autenticación, secreto y contexto

TLS 1.3 negocia secreto efímero con ClientHello (SNI, ALPN, key share), ServerHello y mensajes cifrados. CertificateVerify prueba clave privada; Finished vincula transcripción de . El cliente sigue obligado a validar trust anchor, tiempo y SAN esperado. [2]

Flujo del mecanismo4 etapas

TLS 1.3 con mTLS en un solo viaje de ida y vuelta

Cada mensaje responde a una pregunta distinta: parámetros, identidad del servidor, identidad del cliente.

propuesta

ClientHello. El cliente propone versión, SNI (a qué nombre quiere hablar), ALPN y su parte del intercambio de claves (key_share).

Ver la figura original
app                         api
ClientHello(SNI, ALPN, key_share) ─────────►
◄──────── ServerHello + {Certificate, CertificateVerify, Finished}
{Certificate, CertificateVerify, Finished} ─►
◄──────── application data with traffic keys
ChequeoAntes de autorizarRechazo sano
servidorSAN api.internalcert válido para db.internal
cadenaissuer esperadoCA pública inesperada
clienteURI SAN permitidaworkload de otro
contextométodo/puerto/destinoclient válido hacia DB

Pulsa una fila para fijarla.

¿La entiendes?

Márcala sólo si puedes explicarla con tus palabras y decir por qué importa en producción.

Caso visual: DNS correcto, TLS incorrecto

Si DNS devuelve 10.60.0.20 y TCP conecta, pero hostname mismatch, transporte funcionó y autenticación falló. No se arregla con insecure-skip-verify: investigue SAN, SNI, despliegue y trust bundle. [2]

¿La entiendes?

Márcala sólo si puedes explicarla con tus palabras y decir por qué importa en producción.

Checkpoint 03 · predice antes de revelar

DNS correcto no autentica al peer TLS

El resolver interno responde api.internal → 10.60.0.20. El cliente abre TLS con SNI api.internal, pero el certificado recibido tiene como SAN sólo payments.internal.

DNS: RCODE=NOERROR, A api.internal 10.60.0.20, TTL 30
ClientHello: SNI=api.internal, ALPN=h2
Certificate: DNS:payments.internal; no SAN DNS:api.internal
¿Qué decisión preserva el modelo Zero Trust?

Inspector de paquete

app→dns UDP/53

10.60.0.10:49152 → 10.60.0.53:53

IPv4UDPDNS

IPv4 · bits 64–71 · 8 bits

TTL

64

Saltos restantes. Cada router lo decrementa; en 0 descarta y emite ICMP Time Exceeded.

Cambia en cada salto: por eso el checksum IP se recalcula en cada router.

58 bytes · hex

Supuestos de la síntesis
  • Puerto origen 49152: primer puerto efímero IANA, ilustrativo.
  • TTL inicial 64 (valor por defecto de Linux); Identification 0x1c46 ilustrativo.
  • Consulta A para api.internal, tomada del registro declarado en dns. Transaction ID ilustrativo.