Saltar al contenido
Open Security
Redes e InternetIntermedio· 30 min

TLS sin magia: certificado, SNI, cadena y expiración

Qué mira tu cliente cuando valida HTTPS: nombre del sitio, certificado, cadena de confianza, fechas y errores comunes.

#tls#https#certificados

Antes de empezar necesitás

  • Haber hecho el lab de una request no es magia
  • Tener curl y openssl disponibles

Al terminar vas a poder

  • Leer issuer, subject, SAN y fechas de un certificado
  • Entender por qué SNI importa en hosts compartidos
  • Distinguir certificado vencido, nombre incorrecto y CA no confiable
  • Dejar evidencia sin capturar secretos

Entorno listo con Podman

Una CA de juguete y cuatro servidores TLS locales, uno por cada error común del lab: SNI, vencido, nombre incorrecto y autofirmado. lab-check revisa tu validación con curl y tu diagnóstico de cada puerto.

# Una vez: cloná el repo y construí la imagen
git clone https://github.com/ValentinTorassa/Open-Security-Labs.git
cd Open-Security-Labs
podman build -t osl/tls-sin-magia -f entornos/redes-internet/tls-sin-magia/Containerfile entornos

# Abrí el entorno (se borra al salir)
podman run --rm -it --name osl-tls-sin-magia --hostname labs osl/tls-sin-magia

# Al terminar, adentro del contenedor
lab-check
  • lab-check revisa lo que hiciste y guarda el resultado en /home/vt/evidencia. Desde otra terminal, en la carpeta del repo, npm run lab:check -- redes-internet/tls-sin-magia corre el mismo chequeo y copia tu evidencia a evidencia/tls-sin-magia/.
  • ¿Usás Docker? Cambiá podman por docker en los comandos y funciona igual.
  • Qué trae, qué revisa y sus límites: entornos/redes-internet/tls-sin-magia/README.md.

HTTPS no significa “seguro” por magia. Significa que el cliente pudo negociar TLS y validar un certificado para el nombre que quería visitar. Si entendés esa validación, los errores dejan de ser misteriosos.

Mirá el certificado

openssl s_client abre la conexión TLS y te muestra la cadena. -servername manda SNI: el nombre que el cliente quiere validar.

vt@labs:~
openssl s_client -servername example.com -connect example.com:443 </dev/null 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates

Campos clave:

subject   para quién fue emitido
issuer    quién lo emitió
notBefore desde cuándo vale
notAfter  hasta cuándo vale
SAN       nombres válidos del certificado

Curl como diagnóstico rápido

vt@labs:~
curl -Iv https://example.com

Buscá líneas de TLS, issuer y expire date. Si falla, no saltes directo a -k: primero entendé qué validación falló.

Errores comunes

certificado vencido        fecha actual > notAfter
nombre incorrecto          dominio no aparece en SAN
CA no confiable            cadena no llega a una raíz confiable
SNI ausente o incorrecto   el servidor entrega otro certificado

Lo que practicás en este lab

Llevátelo a tu repo si querés, pero no es obligatorio: es tu aprendizaje.

  • Salida de openssl s_client redactada a los campos importantes
  • Tabla con subject, issuer, SAN y expiración
  • Writeup: qué error esperarías si el nombre no coincide

Reto

Elegí un dominio público, inspeccioná su certificado y escribí qué nombre valida el navegador, quién lo emitió y cuándo vence.

Resolvelo y escribí dos líneas explicando qué pasó. Con eso lo fijás.

¿Hiciste el lab?

Si querés, guardá lo que hiciste (comandos, notas, un repo) para volver después. Y si encontrás un error o querés mejorar este lab,contribuí al repo. El progreso se guarda solo en tu navegador.