Cómo Instalar un Certificado SSL en un Dominio
Un certificado SSL (Secure Sockets Layer / TLS) es una credencial criptográfica emitida por una Autoridad de Certificación (CA) de confianza que autentica la identidad de su servidor y establece un canal cifrado entre el servidor y el navegador del cliente. Cuando se instala correctamente, actualiza su sitio de http:// a https://, activa el candado del navegador y evita la interceptación de los datos transmitidos por ataques de intermediario.
En cuanto al SEO, Google ha tratado HTTPS como una señal de clasificación confirmada desde 2014. Para los usuarios, un certificado ausente o mal configurado activa advertencias de seguridad en el navegador que destruyen las tasas de conversión. Ya sea que administre una sola página de destino o una infraestructura multidominios, configurar SSL correctamente — y mantenerlo así — no es negociable.
Requisitos previos antes de comenzar
Antes de tocar un solo archivo de configuración, confirme que tiene lo siguiente en su lugar:
- Un nombre de dominio registrado apuntado a la dirección IP de su servidor con el DNS completamente propagado. Puede registrar o transferir un dominio a través de Registro de Dominios.
- Un paquete de certificado SSL de una CA. Esto generalmente incluye:
certificate.crt — su certificado firmado principal
private.key — la clave privada generada junto con su CSR
ca_bundle.crt — la cadena de CA intermedia (a veces llamada archivo de cadena)
Acceso al servidor o panel de control — ya sea credenciales de cPanel/Plesk o acceso SSH root/sudo al servidor.
Software de servidor web — Apache o Nginx, en ejecución y configurado para su dominio.
Puerto 443 abierto — verifique que su firewall permita TCP entrante en el puerto 443 antes de instalar cualquier cosa.
Si está ejecutando un entorno de Hosting VPS, tendrá acceso root completo y podrá utilizar cualquiera de los tres métodos a continuación. Los usuarios de hosting compartido generalmente están limitados al método de cPanel.
Elegir el tipo de certificado SSL correcto
No todos los certificados son equivalentes. Seleccionar el tipo incorrecto desperdicia dinero o deja brechas en la cobertura.
Tipo de certificado
Nivel de validación
Tiempo de emisión
Candado del navegador
Ideal para
—
—
—
—
—
DV (Validación de Dominio)
Solo control del dominio
Minutos
Sí
Blogs, entornos de desarrollo, sitios pequeños
OV (Validación de Organización)
Dominio + identidad de la organización
1–3 días
Sí
Sitios web empresariales, plataformas SaaS
EV (Validación Extendida)
Verificación completa de entidad legal
3–7 días
Sí (nombre de la organización en algunos navegadores)
Comercio electrónico, banca, portales de alta confianza
Wildcard (`*.domain.com`)
DV u OV
Minutos–días
Sí
Implementaciones con múltiples subdominios
Multidominio (SAN)
DV, OV o EV
Variable
Sí
Múltiples dominios distintos en un solo certificado
Let’s Encrypt (DV gratuito)
Solo control del dominio
Segundos
Sí
Cualquier dominio de acceso público
Para comercio electrónico en producción o cualquier sitio que maneje datos de tarjetas de pago, se recomiendan firmemente los certificados OV o EV de una CA comercial. Los certificados DV de Let’s Encrypt son completamente confiables y excelentes para la mayoría de los casos de uso, pero no incluyen verificación de identidad organizacional.
Puede adquirir certificados comerciales directamente a través de Certificados SSL si necesita cobertura OV, EV o Wildcard con soporte dedicado.
Método 1: Instalación de un certificado SSL a través de cPanel
La interfaz gráfica de cPanel es el camino más rápido para usuarios en planes de hosting administrado o Hosting Web Compartido. Si prefiere un entorno VPS administrado con cPanel, un VPS con cPanel le ofrece la misma interfaz con control total del servidor.
Paso 1: Iniciar sesión en cPanel
Navegue a la URL de inicio de sesión de cPanel:
https://yourdomain.com:2083
Autentíquese con sus credenciales de hosting.
Paso 2: Navegar al Administrador SSL/TLS
En la sección Seguridad del panel de control de cPanel, haga clic en SSL/TLS. Luego seleccione Administrar sitios SSL bajo el encabezado “Instalar y administrar SSL para su sitio (HTTPS)”.
Paso 3: Seleccionar el dominio de destino
Use el menú desplegable Dominio para seleccionar el dominio que desea proteger. Si el dominio no aparece, confirme que está agregado como dominio adicional o principal en cPanel.
Paso 4: Pegar los componentes del certificado
Abra cada archivo de certificado en un editor de texto plano (no Word) y pegue el contenido en los campos correspondientes:
Certificado (CRT): Contenido de certificate.crtprivate.key. Si generó el CSR dentro de cPanel, este campo se rellena automáticamente desde el almacén de claves de cPanel.ca_bundle.crt. Omitir este campo es una de las causas más comunes de errores de “certificado no confiable” en dispositivos móviles y navegadores más antiguos, porque el navegador no puede construir la cadena hasta una raíz de confianza.Paso 5: Instalar y verificar
Haga clic en Instalar certificado. cPanel valida el par clave-certificado antes de confirmar. Si hay una discrepancia entre la clave privada y la clave pública del certificado, cPanel rechazará la instalación con un error explícito — no lo ignore.
Después de la instalación, visite https://yourdomain.com y confirme que aparece el candado. También pruebe https://www.yourdomain.com si el subdominio www está en uso.
Error común en cPanel: AutoSSL (la integración integrada de Let’s Encrypt en cPanel) puede sobrescribir un certificado instalado manualmente en su próximo ciclo de renovación. Si instaló un certificado comercial, deshabilite AutoSSL para ese dominio en cPanel > Estado SSL/TLS para evitar reemplazos no deseados.
Método 2: Instalación automatizada con Let’s Encrypt y Certbot
Certbot es el cliente ACME de referencia para Let’s Encrypt. Gestiona la generación de CSR, la validación del dominio, la obtención del certificado, la configuración del servidor web y la renovación — todo de forma automática. Este es el enfoque correcto para cualquier servidor Linux que administre directamente.
Paso 1: Conectarse al servidor a través de SSH
ssh username@your-server-ipPaso 2: Instalar Certbot
Debian / Ubuntu (Apache):
sudo apt update && sudo apt install -y certbot python3-certbot-apacheDebian / Ubuntu (Nginx):
sudo apt update && sudo apt install -y certbot python3-certbot-nginxRHEL / AlmaLinux / Rocky Linux (Apache):
sudo dnf install -y epel-release
sudo dnf install -y certbot python3-certbot-apacheRHEL / AlmaLinux / Rocky Linux (Nginx):
sudo dnf install -y epel-release
sudo dnf install -y certbot python3-certbot-nginxPaso 3: Obtener e instalar el certificado
Para Apache:
sudo certbot --apache -d yourdomain.com -d www.yourdomain.comPara Nginx:
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.comCertbot realiza un desafío HTTP-01 de forma predeterminada: coloca un archivo temporal en la raíz de su sitio web y solicita a los servidores de Let’s Encrypt que lo obtengan a través del puerto 80. Esto significa que el puerto 80 debe estar abierto y su DNS debe resolverse correctamente antes de ejecutar el comando.
Cuando se le solicite, seleccione la opción de redirigir todo el tráfico HTTP a HTTPS. Esto escribe una redirección permanente 301 en la configuración de su servidor, que es el comportamiento correcto para SEO y seguridad.
Paso 4: Verificar la renovación automática
Los certificados de Let’s Encrypt caducan después de 90 días. Certbot instala un temporizador systemd (o trabajo cron en sistemas más antiguos) que intenta la renovación dos veces al día cuando el certificado está dentro de los 30 días de vencimiento. Pruebe la lógica de renovación sin renovar realmente:
sudo certbot renew --dry-runUna ejecución en seco exitosa confirma que el proceso de renovación está intacto. Verifique el estado del temporizador con:
systemctl status certbot.timerCaso especial — desafío DNS-01 para certificados wildcard: El desafío HTTP-01 no puede validar dominios wildcard (*.yourdomain.com). Para wildcards, use el desafío DNS-01, que requiere que cree un registro TXT _acme-challenge en su zona DNS:
sudo certbot certonly --manual --preferred-challenges dns -d "*.yourdomain.com" -d yourdomain.comSiga las instrucciones para agregar el registro TXT, espere a que se propague el DNS y luego presione Enter para completar la validación.
Método 3: Instalación manual de SSL a través de SSH (Apache y Nginx)
La instalación manual le brinda control preciso sobre la ubicación del certificado, los conjuntos de cifrado y la configuración del host virtual. Este es el enfoque preferido para servidores de producción donde necesita aplicar políticas TLS específicas.
Paso 1: Subir los archivos del certificado al servidor
Use scp para transferir archivos desde su máquina local:
scp certificate.crt private.key ca_bundle.crt username@your-server-ip:/tmp/Luego muévalos a un directorio seguro, no accesible desde la web:
sudo mkdir -p /etc/ssl/yourdomain
sudo mv /tmp/certificate.crt /etc/ssl/yourdomain/
sudo mv /tmp/private.key /etc/ssl/yourdomain/
sudo mv /tmp/ca_bundle.crt /etc/ssl/yourdomain/
sudo chmod 600 /etc/ssl/yourdomain/private.key
sudo chmod 644 /etc/ssl/yourdomain/certificate.crt /etc/ssl/yourdomain/ca_bundle.crtNota de seguridad crítica: La clave privada nunca debe ser legible por todos. El permiso chmod 600 la restringe únicamente al usuario root. En sistemas donde Apache o Nginx se ejecuta como usuario no root (p. ej., www-data), el servicio aún lee la clave al inicio mientras se ejecuta como root antes de reducir privilegios — por lo tanto, 600 propiedad de root es correcto.
Paso 2a: Configurar Apache
Edite la configuración del host virtual para su dominio:
sudo nano /etc/apache2/sites-available/yourdomain.com.confAgregue o modifique el bloque del host virtual SSL:
<VirtualHost *:80>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
Redirect permanent / https://yourdomain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
SSLEngine on
SSLCertificateFile /etc/ssl/yourdomain/certificate.crt
SSLCertificateKeyFile /etc/ssl/yourdomain/private.key
SSLCertificateChainFile /etc/ssl/yourdomain/ca_bundle.crt
# Modern TLS hardening
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
DocumentRoot /var/www/yourdomain
</VirtualHost>Habilite el módulo SSL y el sitio, luego reinicie Apache:
sudo a2enmod ssl headers
sudo a2ensite yourdomain.com.conf
sudo apache2ctl configtest
sudo systemctl restart apache2Siempre ejecute apache2ctl configtest antes de reiniciar. Un error de sintaxis en el archivo de configuración dejará inactivo todo el servidor web.
Paso 2b: Configurar Nginx
Edite el bloque de servidor de su dominio:
sudo nano /etc/nginx/sites-available/yourdomain.comAgregue la siguiente configuración:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://yourdomain.com$request_uri;
}
server {
listen 443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /etc/ssl/yourdomain/certificate.crt;
ssl_certificate_key /etc/ssl/yourdomain/private.key;
ssl_trusted_certificate /etc/ssl/yourdomain/ca_bundle.crt;
# Modern TLS hardening
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
root /var/www/yourdomain;
index index.html index.php;
}Habilite el sitio y pruebe:
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginxExplicación de OCSP Stapling: Sin stapling, el navegador debe contactar al respondedor OCSP de la CA durante cada handshake TLS para verificar si el certificado ha sido revocado. Esto agrega latencia y filtra datos de navegación a la CA. Con ssl_stapling on, Nginx almacena en caché la respuesta OCSP y la sirve directamente al cliente, eliminando el viaje de ida y vuelta.
Fortalecimiento de TLS: lo que la configuración original omite
Un certificado instalado con la configuración predeterminada es seguro, pero no está reforzado. La siguiente tabla resume las directivas adicionales que separan una calificación aprobatoria de SSL Labs de una A+:
| Directiva de fortalecimiento | Directiva Apache | Directiva Nginx | Propósito |
|---|---|---|---|
| — | — | — | — |
| Deshabilitar TLS 1.0 / 1.1 | `SSLProtocol all -TLSv1 -TLSv1.1` | `ssl_protocols TLSv1.2 TLSv1.3` | Eliminar vulnerabilidades de protocolos obsoletos |
| Encabezado HSTS | `Header always set Strict-Transport-Security` | `add_header Strict-Transport-Security` | Forzar HTTPS a nivel del navegador, prevenir SSL stripping |
| OCSP Stapling | `SSLUseStapling on` | `ssl_stapling on` | Reducir la latencia del handshake, mejorar la privacidad |
| Deshabilitar tickets de sesión | `SSLSessionTickets off` | `ssl_session_tickets off` | Prevenir la degradación del secreto hacia adelante |
| Conjunto de cifrado fuerte | `SSLCipherSuite ECDHE-…` | `ssl_ciphers ECDHE-…` | Aplicar cifrados AEAD, eliminar RC4/3DES |
| HTTP/2 | `Protocols h2 http/1.1` | `listen 443 ssl http2` | Mejora de rendimiento sobre TLS |
Verificación y prueba de la instalación SSL
La instalación no está completa hasta que haya verificado el resultado desde una perspectiva externa.
Verificación en el navegador
Visite https://yourdomain.com. El icono de candado confirma un certificado válido y de confianza. Haga clic en el candado e inspeccione los detalles del certificado: verifique que el Nombre Común o el Nombre Alternativo del Sujeto coincida con su dominio y compruebe la fecha de vencimiento.
Prueba del servidor SSL Labs
Navegue a SSL Labs e ingrese su dominio. El informe califica su configuración TLS de F a A+ y señala problemas específicos: conjuntos de cifrado débiles, certificados de cadena faltantes, ausencia de HSTS y soporte de protocolos. Una calificación A+ requiere HSTS con un max-age largo y sin soporte para TLS 1.0 o 1.1.
Verificación por línea de comandos con OpenSSL
openssl s_client -connect yourdomain.com:443 -servername yourdomain.comEsto muestra la cadena de certificados completa, el conjunto de cifrado negociado y la versión TLS. Busque Verify return code: 0 (ok) al final de la salida. Cualquier código de retorno distinto de cero indica un problema de cadena o confianza.
Para verificar la fecha de vencimiento del certificado directamente:
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -datesVerificación de contenido mixto
Después de habilitar HTTPS, el contenido mixto es el problema residual más común. Ocurre cuando una página HTTPS carga recursos (imágenes, scripts, hojas de estilo, iframes) a través de HTTP. El contenido mixto bloquea los recursos activos (scripts, iframes) por completo en los navegadores modernos y genera advertencias en la consola para los recursos pasivos (imágenes).
Corrija el contenido mixto mediante:
- Actualizar todas las URL
http://codificadas en su CMS o HTML ahttps://o relativas al protocolo//. - Agregar un encabezado de Política de Seguridad de Contenido con
upgrade-insecure-requestscomo medida temporal:
add_header Content-Security-Policy "upgrade-insecure-requests" always;- Usar las DevTools del navegador (F12 > Consola) para identificar los recursos específicos que causan el problema.
Renovación de certificados y gestión del ciclo de vida
| Fuente del certificado | Validez predeterminada | Método de renovación | Automatización |
|---|---|---|---|
| — | — | — | — |
| Let’s Encrypt (Certbot) | 90 días | `certbot renew` mediante temporizador systemd | Completamente automático |
| CA comercial (cPanel) | 1–2 años | Reemisión e instalación manual | Manual o con scripts |
| CA comercial (SSH) | 1–2 años | Reemplazar archivos, recargar servidor web | Automatizable con cron |
| CA interna / autofirmado | Personalizado | Manual | Manual |
Para certificados comerciales administrados manualmente, configure un recordatorio en el calendario 30 días antes del vencimiento. Un certificado vencido es peor que ningún certificado — los navegadores muestran un error de bloqueo de página completa que los usuarios no pueden eludir fácilmente.
Si está ejecutando múltiples dominios o una aplicación de alto tráfico en un Servidor Dedicado, considere implementar una solución centralizada de gestión de certificados como cert-manager (Kubernetes), Vault PKI, o un certificado wildcard para reducir la carga de renovación en los subdominios.
Matriz de decisión: qué método de instalación usar
| Escenario | Método recomendado |
|---|---|
| — | — |
| Hosting compartido, sin acceso SSH | Administrador SSL/TLS de cPanel |
| VPS o servidor dedicado, se necesita certificado gratuito | Certbot (Let’s Encrypt) |
| VPS o servidor dedicado, certificado comercial OV/EV | Instalación manual por SSH |
| Certificado wildcard (`*.domain.com`) | SSH manual + desafío DNS-01 mediante Certbot |
| Certificado SAN multidominio | Instalación manual por SSH |
| Sin experiencia técnica, hosting administrado | AutoSSL de cPanel o SSL con un clic del proveedor de hosting |
Lista de verificación de puntos clave técnicos
- Confirme que el puerto 443 está abierto en su firewall antes de instalar cualquier certificado.
- Verifique siempre que la clave privada coincida con el certificado antes de la instalación:
openssl x509 -noout -modulus -in certificate.crt | md5sumyopenssl rsa -noout -modulus -in private.key | md5sumdeben producir hashes idénticos. - Incluya la cadena intermedia completa (
ca_bundle.crt) — omitirla causa fallos de confianza en navegadores móviles incluso cuando Chrome de escritorio muestra un candado. - Establezca
chmod 600en el archivo de clave privada; nunca lo exponga en un directorio accesible desde la web. - Deshabilite TLS 1.0 y TLS 1.1 en la configuración de su servidor web — estos protocolos están obsoletos y son explotables.
- Habilite HSTS con
includeSubDomainssolo después de confirmar que todos los subdominios también sirven HTTPS. - Ejecute
certbot renew --dry-rundespués de la configuración inicial de Certbot para confirmar que el proceso de renovación funciona. - Pruebe con SSL Labs después de cada instalación o cambio de configuración.
- Audite el contenido mixto inmediatamente después de cambiar a HTTPS — rompe silenciosamente la funcionalidad.
- Para certificados wildcard de Let’s Encrypt, use el desafío DNS-01, no HTTP-01.
Preguntas frecuentes
¿Cuál es la diferencia entre un certificado SSL y un certificado TLS?
SSL (Secure Sockets Layer) es el protocolo heredado que fue obsoleto en 1999. Su sucesor, TLS (Transport Layer Security), es lo que todas las conexiones HTTPS modernas utilizan realmente. El término “certificado SSL” persiste como abreviatura en la industria, pero cada certificado emitido hoy opera sobre TLS 1.2 o TLS 1.3.
¿Por qué mi certificado SSL aparece como confiable en Chrome pero no en dispositivos Android?
Esto casi siempre se debe a un certificado de cadena intermedia faltante. Chrome de escritorio tiene un mecanismo agresivo de obtención de certificados (AIA fetching) que puede reconstruir la cadena incluso cuando está ausente del servidor. El almacén del sistema de Android no lo hace. Incluya siempre el archivo de cadena ca_bundle.crt en la configuración de su servidor.
¿Puedo instalar un certificado SSL en un dominio que aún no tiene un sitio web?
Sí, pero solo si el registro DNS A del dominio resuelve a la dirección IP del servidor. La CA debe poder llegar al servidor para completar la validación del dominio. Si el DNS aún no se ha propagado, el desafío fallará.
¿Cómo renuevo un certificado SSL comercial sin tiempo de inactividad?
Genere un nuevo CSR en el servidor, envíelo a su CA, reciba el nuevo paquete de certificados, reemplace los archivos del certificado en el servidor y recargue el servidor web (systemctl reload apache2 o systemctl reload nginx). Una recarga aplica el nuevo certificado sin interrumpir las conexiones existentes, a diferencia de un reinicio completo.
¿La instalación de un certificado SSL redirige automáticamente HTTP a HTTPS?
No. Instalar un certificado solo habilita HTTPS. La redirección de HTTP a HTTPS debe configurarse por separado en su host virtual o bloque de servidor. Los complementos --apache y --nginx de Certbot ofrecen configurar esta redirección automáticamente durante la instalación. Para instalaciones manuales, agregue una directiva explícita Redirect permanent (Apache) o return 301 (Nginx) en el bloque de servidor del puerto 80.
