Un certificado autofirmado es uno que creas tú mismo — actúas como tu propia Autoridad Certificadora. Un certificado firmado por CA es emitido y firmado por una Autoridad Certificadora de confianza (como Let’s Encrypt o DigiCert) en la que los navegadores ya confían.
La diferencia práctica: los certificados autofirmados provocan advertencias de seguridad en el navegador. Los firmados por CA no.
Comparación
| Autofirmado | Firmado por CA | |
|---|---|---|
| Creado por | Tú (comando openssl) | Una CA de confianza |
| Confianza del navegador | Advertencia: «No confiable» | Icono de candado |
| Fortaleza del cifrado | Igual | Igual |
| Costo | Gratis | Gratis (Let’s Encrypt) o de pago |
| Validación | Ninguna — tú respondes por ti mismo | La CA verifica dominio/organización |
| Caso de uso | Desarrollo, interno, pruebas | Sitios web en producción |
| Renovación | Manual (tú defines la validez) | 90 días (LE) o 1 año (de pago) |
| Protección man-in-the-middle | Débil — usuarios entrenados a hacer clic para pasar advertencias | Fuerte — advertencias solo en problemas reales |
Por qué los certificados autofirmados muestran advertencias
Los navegadores confían en certificados basándose en quién los firmó. Tu SO y navegador vienen con una lista de ~100-150 CAs raíz de confianza. Cuando un servidor presenta un certificado firmado por una de estas CAs, el navegador muestra un candado.
Un certificado autofirmado no está firmado por ninguna CA de confianza — está firmado por su propia clave privada. El navegador no tiene forma de verificar que el certificado es legítimo, así que muestra una advertencia. Este es el comportamiento correcto — sin verificación de CA, cualquiera podría crear un certificado haciéndose pasar por google.com.
Cuándo usar certificados autofirmados
Servicios internos
Servicios que no están expuestos a internet — paneles internos, herramientas de monitoreo, paneles de administración de bases de datos. Tu equipo puede añadir la CA autofirmada a sus almacenes de confianza.
Desarrollo y pruebas
HTTPS rápido para desarrollo local cuando no quieres configurar mkcert. La advertencia del navegador es molesta pero funcional para pruebas.
IoT y dispositivos embebidos
Dispositivos que se comunican con un servidor conocido y pueden anclar el certificado — no involucran almacén de confianza del navegador.
Redes aisladas
Redes sin acceso a internet donde el protocolo ACME de Let’s Encrypt no puede llegar. Autofirmado es la única opción.
Cuándo NO usar certificados autofirmados
Cualquier sitio web público
Los usuarios ven una advertencia alarmante y se van. Los motores de búsqueda pueden no rastrear páginas HTTPS con certificados no confiables. No hay razón para autofirmar cuando los certificados de Let’s Encrypt son gratuitos.
Cualquier sitio que maneje datos de usuario
Los certificados autofirmados entrenan a los usuarios a hacer clic para pasar las advertencias de seguridad — lo opuesto a buena seguridad. Cuando un ataque real dispara una advertencia, los usuarios habituados a hacer clic en «Continuar de todos modos» no lo notarán.
Cómo crear un certificado autofirmado
# ECDSA (recommended)
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout key.pem -out cert.pem -days 365 -nodes \
-subj "/CN=internal.example.com" \
-addext "subjectAltName=DNS:internal.example.com,IP:10.0.0.5"
# RSA
openssl req -x509 -newkey rsa:2048 \
-keyout key.pem -out cert.pem -days 365 -nodes \
-subj "/CN=internal.example.com"
Usa los archivos resultantes cert.pem y key.pem en la configuración de tu servidor. Nota: fullchain.pem y chain.pem no son necesarios — no hay cadena con certificados autofirmados.
Mejores alternativas para cada escenario
| Escenario | En lugar de autofirmado, usa |
|---|---|
| Sitio web en producción | Let’s Encrypt vía GetHTTPS — gratuito, confiable, 5 minutos |
| Desarrollo local | mkcert — confiable localmente, sin advertencias |
| Servicios internos | Let’s Encrypt (si es accesible por internet) o una CA privada |
| Pruebas/staging | Entorno de staging de Let’s Encrypt — certificados de prueba ilimitados |
Los certificados autofirmados tenían sentido cuando los certificados SSL costaban $100+/año. Ahora que Let’s Encrypt es gratuito, rara vez hay razón para autofirmar algo más allá de entornos verdaderamente aislados.
Preguntas frecuentes
¿Un certificado autofirmado es menos seguro que uno firmado por CA?
El cifrado es idéntico — mismos algoritmos, mismas fortalezas de clave. La diferencia es la confianza: un certificado firmado por CA prueba la identidad del servidor vía un tercero de confianza. Un certificado autofirmado no prueba nada — cualquiera puede crear uno para cualquier dominio. El problema de seguridad no es la criptografía; es la falta de autenticación.
¿Puedo hacer que los navegadores confíen en mi certificado autofirmado?
Sí, en máquinas que controles. Importa el certificado (o una CA autofirmada que lo firmó) al almacén de confianza del SO/navegador. Esto es lo que mkcert automatiza. Pero no puedes hacer que los navegadores de otras personas confíen en él — para eso se necesita una CA real.
Mi proveedor de hosting me dio un certificado autofirmado. ¿Está bien?
No, para un sitio web público. Pide a tu proveedor que habilite Let’s Encrypt gratuito (la mayoría de los hosts lo soportan). Si no lo hacen, usa GetHTTPS para obtener un certificado confiable tú mismo.
¿Por qué no simplemente crear mi propia CA?
Puedes, pero los navegadores no confiarán en ella a menos que pases por el proceso de años y costoso de unirte a los almacenes de confianza de los navegadores. Una CA privada funciona para infraestructura interna (tu equipo instala el certificado raíz), pero no para sitios web públicos. Para sitios públicos, usa una CA confiable como Let’s Encrypt.