Un certificado TLS vencido tiró toda la producción un domingo
Postmortem: cómo un certificado SSL/TLS vencido dejó una fintech sin producción 3 horas un domingo, y cómo lo resolvimos y blindamos para que no vuelva a pasar.
Caso anonimizado. Los detalles del cliente fueron removidos; el incidente y la intervención son reales y representativos del tipo de trabajo de MayDay.
Qué pasaba
Un domingo a la mañana, la API de pagos de una fintech empezó a rechazar todas las conexiones. Los clientes veían errores de “conexión no segura” y la app móvil no podía autenticar. El equipo no tenía a nadie de guardia y tardó casi una hora en darse cuenta de que el certificado TLS había vencido esa madrugada.
La renovación automática existía, pero el hook de reload de nginx venía fallando
en silencio desde hacía semanas: el certificado se renovaba en disco, pero nginx
seguía sirviendo el viejo. Nadie lo monitoreaba.
Qué hicimos
- Estabilización inmediata: forzamos la renovación y un
reloadlimpio de nginx, validando la cadena completa conopenssl s_client. Producción volvió en 38 minutos desde que nos llamaron. - Causa raíz: el
deploy-hookde certbot apuntaba a un contenedor que había cambiado de nombre en un deploy anterior. La renovación corría, el reload no. - Blindaje: reescribimos el hook para que sea idempotente, agregamos un check de expiración del certificado efectivamente servido (no el del disco) y una alerta a 14 días de vencimiento.
Resultado
- Producción arriba en 38 minutos.
- Monitoreo de expiración real (lo que sirve nginx, no lo que hay en disco).
- Cero incidentes relacionados a certificados desde la intervención.
La deuda no era el certificado: era no estar mirando lo que el servidor realmente entrega. Eso es exactamente lo que un Health Check detecta antes de que explote.
¿Algo parecido en tu producción?
Pedí un Health Check gratis: te decimos dónde están tus riesgos reales antes de que se vuelvan un postmortem.
Pedí tu Health Check gratis →