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:

  • SSLCertificateFilecertificate.crt (certificado del servidor)
  • SSLCertificateKeyFileprivate.key (clave privada)
  • SSLCertificateChainFileca_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.

Imagen: <la configuración del VirtualHost de Apache en un editor>
VirtualHost configurado con las directivas SSL para el puerto 443.

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 SSLCertificateKeyFile es incorrecta o la clave está dañada.
  • Advertencia de cadena en el navegador: no se ha definido SSLCertificateChainFile; añade ca_bundle.crt.
  • .htaccess se ignora: en el bloque Directory correspondiente debe estar definido AllowOverride 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.