23
Gestión de Certificados
Gestión de Certificados — vista general
Certificate Management proporciona monitoreo persistente de certificados TLS/SSL. Rastrea fechas de vencimiento, envía alertas 30/14/7 días antes del vencimiento y consulta los registros de Certificate Transparency (crt.sh) para detectar nuevos certificados emitidos para sus dominios.
- •Verificaciones TLS programadas — intervalo configurable (1–72h)
- •Notificaciones de vencimiento a través de todos los canales configurados (email, Telegram, Slack, ...)
- •Grado A–F por certificado (validez de cadena, coincidencia de hostname, fortaleza de clave, días restantes)
- •Monitoreo de Certificate Transparency — consulta diaria de crt.sh para nuevos certs
- •Historial completo de verificaciones con gráfico de línea de tiempo de días restantes

Pestañas de la interfaz
| Pestaña | Descripción |
|---|---|
| Resumen | StatCards (Monitoreados / Válidos / Por vencer / Vencidos), gráfico de barras de línea de tiempo, tabla de monitores que requieren atención |
| Monitores | Lista de todos los monitores con estado, grado, días restantes. Fila expandible muestra detalles completos del cert. Botón de verificación manual, agregar/editar/eliminar. |
| Alertas CT | Nuevos certificados descubiertos en registros CT para dominios monitoreados. El badge muestra el recuento de alertas no confirmadas. |
| Historial | Seleccione un monitor → gráfico de línea de días restantes en el tiempo + tabla de verificaciones individuales. |
Cálculo del grado
Cada verificación produce un grado (A/B/C/F) evaluando cuatro criterios en orden:
| Grado | Condición |
|---|---|
| F | Certificado vencido (días < 0) o error de conexión |
| C | Discrepancia de hostname (CN / SAN no coincide con FQDN) |
| B | Validación de cadena fallida, o clave débil (RSA < 2048 bit), o 0–13 días restantes |
| B | 14–29 días restantes (cert de lo contrario válido) |
| A | ≥ 30 días restantes, cadena válida, coincidencia de hostname, clave adecuada |
Configuración del monitor
| Campo | Descripción | Predeterminado |
|---|---|---|
| Nombre | Nombre de visualización del monitor | — |
| FQDN | Nombre de dominio a verificar (sin https://) | — |
| Puerto | Puerto TLS para conectarse | 443 |
| Intervalo | Con qué frecuencia ejecutar la verificación (horas) | 24h |
| Notificar antes (días) | Días antes del vencimiento para enviar una notificación. Se pueden seleccionar múltiples umbrales. | 30, 14, 7 |
Monitoreo de Certificate Transparency
Cada vez que se verifica un dominio, el sistema también consulta la API pública de logs CT de crt.sh para cualquier certificado emitido para ese dominio (búsqueda wildcard: %.domain.tld). Los nuevos hallazgos se almacenan como Alertas CT.
- •Detecta certificados emitidos por terceros (phishing potencial, subdominios mal configurados)
- •Cada entrada CT se almacena con: número de serie, emisor, CN, SANs, período de validez, ID de crt.sh
- •Las alertas se pueden confirmar (acknowledge) para marcarlas como revisadas
- •El badge en la pestaña Alertas CT muestra el recuento de alertas no confirmadas
REST API
Todas las operaciones de gestión de certificados están disponibles a través de la REST API (Security tier, se requiere Bearer token):
| Method | Endpoint | Descripción |
|---|---|---|
| GET | /api/v1/certificates/summary | Estadísticas y línea de tiempo de vencimiento |
| GET | /api/v1/certificates/monitors | Listar todos los monitores |
| POST | /api/v1/certificates/monitors | Crear monitor |
| PUT | /api/v1/certificates/monitors/{id} | Actualizar monitor |
| DELETE | /api/v1/certificates/monitors/{id} | Eliminar monitor (CASCADE) |
| POST | /api/v1/certificates/monitors/{id}/check | Disparar verificación inmediata → devuelve CertCheck |
| GET | /api/v1/certificates/monitors/{id}/history | Historial de verificaciones (?limit=30) |
| GET | /api/v1/certificates/ct-alerts | Alertas CT (?limit=50, ?monitor_id=N) |
| PUT | /api/v1/certificates/ct-alerts/{id}/acknowledge | Confirmar alerta CT |
Notas de arquitectura
Servicio en segundo plano
CertificateMonitorService se ejecuta como un bucle asyncio (tick de 30s). Utiliza FOR UPDATE SKIP LOCKED para distribuir de forma segura el trabajo entre múltiples workers. La verificación en sí usa asyncio.open_connection con ssl.create_default_context() + análisis de cryptography.x509 — sin enumeración de cipher suites, generalmente completa en menos de 2 segundos.
Tablas de base de datos
| Tabla | Descripción |
|---|---|
| cert_monitors | Qué monitorear — FQDN, puerto, intervalo, umbrales de notificación |
| cert_checks | Historial de verificaciones — detalle completo del cert por ejecución (CN, SANs, grado, clave, huella...) |
| cert_ct_alerts | Hallazgos de transparencia CT — únicos por (monitor_id, serial_number) |