Instalación de SSL en Apache y redirección a HTTPS con .htaccess
Apache HTTP Server sigue siendo uno de los servidores web más extendidos y proporciona soporte SSL mediante el módulo mod_ssl. En esta guía veremos paso a paso cómo definir tu certificado dentro de un VirtualHost y cómo redirigir de HTTP a HTTPS con .htaccess.
Archivos y módulo necesarios
Apache espera las piezas del certificado en directivas separadas:
- SSLCertificateFile →
certificate.crt(certificado del servidor) - SSLCertificateKeyFile →
private.key(clave privada) - SSLCertificateChainFile →
ca_bundle.crt(cadena intermedia)
Si no dispones de estos archivos, puedes verificar tu dominio con nuestro asistente de SSL gratuito y descargar estos tres archivos (y, si lo deseas, el fullchain.pem combinado) del paquete ZIP.
Primero, asegúrate de que el módulo mod_ssl está activado:
sudo a2enmod ssl
sudo systemctl restart apache2
Paso 1 — Coloca los archivos
sudo mkdir -p /etc/apache2/ssl/tudominio.com
sudo cp certificate.crt /etc/apache2/ssl/tudominio.com/
sudo cp private.key /etc/apache2/ssl/tudominio.com/
sudo cp ca_bundle.crt /etc/apache2/ssl/tudominio.com/
sudo chmod 600 /etc/apache2/ssl/tudominio.com/private.key
Paso 2 — Configura el VirtualHost
Define un servidor virtual para el puerto 443 (p. ej. /etc/apache2/sites-available/tudominio-ssl.conf):
<VirtualHost *:443>
ServerName tudominio.com
ServerAlias www.tudominio.com
DocumentRoot /var/www/tudominio.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/tudominio.com/certificate.crt
SSLCertificateKeyFile /etc/apache2/ssl/tudominio.com/private.key
SSLCertificateChainFile /etc/apache2/ssl/tudominio.com/ca_bundle.crt
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
<Directory /var/www/tudominio.com>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Nota: en Apache 2.4.8 y versiones posteriores, en lugar de SSLCertificateChainFile también es válido usar un fullchain.pem que incluya la cadena intermedia directamente dentro de SSLCertificateFile.
Paso 3 — Activa el sitio y pruébalo
sudo a2ensite tudominio-ssl.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
La salida de configtest debe decir Syntax OK. En sistemas RHEL/CentOS, el nombre del servicio es httpd y el directorio es /etc/httpd/.
Paso 4 — Redirección a HTTPS con .htaccess
Añade la siguiente regla al archivo .htaccess del directorio raíz de tu sitio. Esto migra de forma permanente (301) todas las peticiones HTTP a HTTPS:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Verifica desde la terminal que la redirección funciona:
curl -I http://tudominio.com
En la respuesta deberías ver las líneas 301 Moved Permanently y Location: https://....
Problemas frecuentes
- "AH02572: Failed to configure ... no private key": la ruta de
SSLCertificateKeyFilees incorrecta o la clave está dañada. - Advertencia de cadena en el navegador: no se ha definido
SSLCertificateChainFile; añadeca_bundle.crt. - .htaccess se ignora: en el bloque
Directorycorrespondiente debe estar definidoAllowOverride All.
Resumen
SSL en Apache consiste simplemente en que las tres directivas (SSLCertificateFile, SSLCertificateKeyFile, SSLCertificateChainFile) apunten a los archivos correctos y en configurar una redirección 301 con .htaccess. Puedes generar tus archivos con nuestro asistente de SSL gratuito y descargarlos del ZIP.