Cincuenta minutos en clase; los minutos de cada ejercicio son un ritmo sugerido y el docente gestiona el tiempo, así que lo que no se cierre en el aula continúa como trabajo independiente. El lector de certificados y el simulador de la cadena de confianza corren en su navegador, sin conexión. Construir una autoridad y emitir certificados se hace con OpenSSL en su máquina: los comandos están abajo.
head, tail y cat), no en cmd ni en PowerShell, donde no existen. En macOS o Linux, la Terminal normal. La alternativa en Python corre en cualquier terminal.Peguen un certificado en formato PEM y lean sus campos sin pasar por el navegador. Viene cargado uno de ejemplo con la estructura de la evidencia A del caso; reemplácenlo por el de un sitio real.
# deja el certificado del sitio en sitio.crt, listo para pegar arriba
echo | openssl s_client -connect www.iue.edu.co:443 -servername www.iue.edu.co 2>/dev/null | openssl x509 > sitio.crtimport ssl from cryptography import x509 pem = ssl.get_server_certificate(("www.iue.edu.co", 443)) cert = x509.load_pem_x509_certificate(pem.encode()) print("Emisor: ", cert.issuer.rfc4514_string()) print("Vigencia:", cert.not_valid_before_utc, "->", cert.not_valid_after_utc) nombres = cert.extensions.get_extension_for_class(x509.SubjectAlternativeName) print("Ampara: ", nombres.value.get_values_for_type(x509.DNSName)) print("Firma: ", cert.signature_hash_algorithm.name)
Antes de mostrar el candado, el navegador hace tres comprobaciones sobre el certificado. Cámbielas y vea cuándo confía y cuándo advierte. Coopaburrá falla en la primera.
El navegador trae de fábrica una lista de autoridades certificadoras en las que confía: unas cuantas decenas, auditadas y públicas. Cuando llega un certificado, comprueba que lo haya firmado una de ellas, o alguien en quien una de ellas confíe. La autoridad interna de Coopaburrá, «Coopaburra Root CA 2019», no está en esa lista y nunca lo estará: la creó un contratista en 2019 para no pagar certificados.
Por eso los asociados ven una advertencia en cada visita. Y como llevan años viéndola, aprendieron a aceptarla sin leerla —exactamente lo que un atacante necesita—. El ejercicio 3 les va a mostrar por qué esa advertencia no es un formalismo.
Creen una raíz, emitan un certificado de servidor y háganlo funcionar. Van a reproducir exactamente lo que hizo Coopaburrá en 2019, y a sentir por qué es tan fácil.
# 1 · crear la raiz: su propia autoridad certificadora openssl req -x509 -newkey rsa:4096 -keyout raiz.key -out raiz.crt -days 3650 \ -nodes -subj "/CN=Mi Autoridad de Practica" # 2 · una llave y una solicitud para un servidor openssl req -newkey rsa:2048 -keyout servidor.key -out servidor.csr \ -nodes -subj "/CN=mi-sitio.local" # 3 · la raiz firma el certificado del servidor openssl x509 -req -in servidor.csr -CA raiz.crt -CAkey raiz.key \ -CAcreateserial -out servidor.crt -days 365 # 4 · verificar la cadena openssl verify -CAfile raiz.crt servidor.crt
El ejercicio que hay que entender. Con esa misma raíz, emitan un certificado para un dominio que no es suyo, instalen la raíz en su navegador y observen que no aparece ninguna advertencia.
# emitir un certificado para un dominio ajeno, con SU raiz openssl req -newkey rsa:2048 -keyout falso.key -out falso.csr \ -nodes -subj "/CN=www.un-banco-cualquiera.com" openssl x509 -req -in falso.csr -CA raiz.crt -CAkey raiz.key \ -CAcreateserial -out falso.crt -days 365 # mirar el certificado: dice ser de un dominio que no es suyo openssl x509 -in falso.crt -noout -subject
Revisen las versiones y las suites que ofrece un servidor, y produzcan el listado de lo que habría que apagar, con la justificación de cada línea. La evidencia A dice que el portal ofrece TLS 1.0, 1.1 y 1.2.
# versiones y suites que acepta un servidor nmap --script ssl-enum-ciphers -p 443 www.iue.edu.co # o, sin nmap, probar una version concreta: openssl s_client -connect www.iue.edu.co:443 -tls1_2 </dev/null openssl s_client -connect www.iue.edu.co:443 -tls1_3 </dev/null
Seis situaciones sobre certificados y canal. Elijan la causa.
Una página por equipo al final del bloque. Se evalúa el análisis, no el resultado.