Por qué usar este analizador?
Valide lo que aparecerá en su certificado antes de enviarlo a una Autoridad de Certificación (CA). Detecte un SAN faltante, una clave débil, un algoritmo obsoleto o una codificación IDN dudosa. Ahorre tiempo durante la integración o renovación leyendo los campos útiles de inmediato.
Qué es un CSR?
Un Certificate Signing Request es un archivo de texto en formato PEM que contiene:
- Su clave pública (RSA o EC)
- Información de identidad: sujeto (CN, O, OU, L, ST, C) y SAN
- Una firma hecha con su clave privada para demostrar posesión
El CSR se envía a una CA (Let's Encrypt, DigiCert, GlobalSign, Sectigo...) que emite el certificado si la validación pasa (DV, OV o EV).
Cuándo generar un CSR?
| Caso de uso | Descripción |
|---|---|
| Nuevo certificado | Crear un certificado TLS para servidor web, API, MTA |
| Renovación | Renovar un certificado existente con un nuevo par de claves |
| Agregar SAN | Agregar un nuevo subdominio o FQDN al certificado |
| Migración RSA a EC | Cambiar a clave EC para mejor rendimiento |
| Estandarización | Armonizar campos en una infraestructura heterogénea |
Qué debe contener un buen CSR?
Campos obligatorios
- SAN (Subject Alternative Names): lista de todos los nombres cubiertos, incluyendo el dominio desnudo si es necesario. Sin SAN, muchas CA rechazarán.
- Clave pública: RSA 2048 bits mínimo (ideal 3072) o EC P-256/P-384
- Firma: SHA-256 recomendado (SHA-1 rechazado)
Campos opcionales
- Subject CN: a menudo ignorado por las CA modernas, pero mantenlo por compatibilidad
- O, OU, L, ST, C: útiles para OV/EV, innecesarios para DV
- Key Usage / Extended Key Usage: según sus necesidades específicas
Importante: Un CN solo ya no es suficiente. Los SAN son obligatorios para la mayoría de las CA.
Ejemplos OpenSSL
CSR RSA 3072 con SAN
Archivo san.cnf:
[ req ]
prompt = no
distinguished_name = dn
req_extensions = v3_req
[ dn ]
CN = www.ejemplo.com
[ v3_req ]
subjectAltName = @alt
[ alt ]
DNS.1 = www.ejemplo.com
DNS.2 = ejemplo.com
Comando:
openssl req -new -newkey rsa:3072 -nodes -keyout site.key -out site.csr -config san.cnf
CSR EC P-256 con SAN
openssl ecparam -name prime256v1 -genkey -noout -out site.key
openssl req -new -key site.key -out site.csr -config san.cnf
Nombres de Dominio Internacionalizados (IDN)
Use punycode (xn--...) en los SAN para evitar sorpresas de codificación.
Errores comunes
| Error | Impacto | Solución |
|---|---|---|
| SAN faltantes | El certificado cubre menos nombres de lo esperado | Agregar todos los dominios en la sección [alt] |
| RSA 1024 o SHA-1 | Probable rechazo por la CA | Usar RSA 2048+ y SHA-256 |
| Clave privada expuesta | Compromiso de seguridad | Nunca pegue la clave privada en línea |
| Codificación IDN incorrecta | Dominio no reconocido | Usar punycode exacto |
| Wildcard sin dominio desnudo | *.ejemplo.com no cubre ejemplo.com | Agregar ambos en los SAN |
Buenas prácticas
- Genere el par de claves del lado del servidor y mantenga la clave privada fuera de cualquier sistema compartido
- Prefiera EC P-256/P-384 o RSA 3072+ para nuevas implementaciones
- Limite la lista de SAN a lo que realmente se necesita
- Mantenga un registro: fecha, sujeto, SAN, tamaño de clave, persona responsable
- Pruebe el CSR después de generarlo para evitar intercambios con la CA
Privacidad
Su CSR se envía a la API de CaptainDNS solo para ser decodificado y mostrado. El contenido no se almacena. Ningún campo se registra en texto claro. Solo se registran métricas técnicas anónimas (tiempo de procesamiento, tamaño, tipo de clave, algoritmo) para monitoreo de disponibilidad.