bg-tutorials

Cómo instalar un certificado SSL en Apache

En esta guía aprenderás cómo instalar un certificado SSL en Apache, paso a paso. Las instrucciones se aplican a Apache 2.4, la línea de lanzamiento estable actual.

Tabla de contenidos

¿Cómo generar un código CSR en Apache?

La Solicitud de Firma de Certificado, o simplemente CSR, es un pequeño archivo de texto que contiene información sobre la propiedad de tu dominio y/o tu empresa. Generar un CSR es una parte integral del proceso de compra de SSL, y todas las Autoridades de Certificación comerciales exigen que los solicitantes de SSL completen este paso.

Tienes dos opciones:

Instalar un certificado SSL en Apache

Después de que la Autoridad de Certificación firme y te envíe el certificado SSL, puedes instalarlo de forma segura en tu servidor Apache. Sigue los pasos a continuación.

Paso 1: Prepara tus archivos de certificado

Descarga y extrae los archivos de la carpeta ZIP que recibiste de tu Autoridad de Certificación. Normalmente encontrarás:

  • El archivo .crt – tu certificado SSL principal.
  • El archivo .ca-bundle – los certificados intermedios (y raíz) que forman la cadena de confianza. Esta cadena es necesaria para que los navegadores y aplicaciones puedan verificar tu certificado. Sin ella, algunos clientes pueden marcar tu sitio como no seguro.

Sube estos archivos, junto con la clave privada (.key) que generaste junto con tu CSR, a un directorio seguro en tu servidor, por ejemplo /etc/ssl/. Mantén la clave privada legible solo por root (chmod 600).

Recomendado (Apache 2.4.8 y versiones más recientes): combina tu certificado y el paquete de la CA en un único archivo de «cadena completa». Desde Apache 2.4.8, la directiva SSLCertificateFile carga los certificados intermedios directamente desde este archivo, por lo que la antigua directiva SSLCertificateChainFile ya no es necesaria:

cat your_domain.crt your_domain.ca-bundle > your_domain_fullchain.crt

Si tu CA entregó los certificados intermedios como archivos separados, concaténalos primero con tu certificado, seguidos de los intermedios ordenados desde el que firmó tu certificado hasta la raíz (el certificado raíz en sí es opcional):

cat your_domain.crt intermediate.crt root.crt > your_domain_fullchain.crt

Por ejemplo, al instalar un certificado Sectigo PositiveSSL, deberías concatenar el certificado de tu dominio con el paquete intermedio de Sectigo. Usa siempre los nombres de archivo exactos proporcionados por tu CA.

Paso 2: Habilita el módulo SSL (mod_ssl)

Antes de configurar HTTPS, asegúrate de que el módulo SSL de Apache esté habilitado.

En Debian/Ubuntu, habilita mod_ssl (y mod_headers, que necesitarás para el encabezado HSTS en el Paso 4):

sudo a2enmod ssl
sudo a2enmod headers

En RHEL/CentOS/AlmaLinux/Rocky Linux, instala el paquete del módulo SSL (el módulo se carga automáticamente una vez instalado):

sudo dnf install mod_ssl

Paso 3: Localiza el archivo de configuración de Apache

Dependiendo de tu sistema operativo y la versión de Apache, la configuración puede residir en diferentes archivos. Busca httpd.conf, apache2.conf, o un archivo de configuración SSL/de sitio dedicado, en una de las siguientes ubicaciones:

  • Debian/Ubuntu: configuración principal /etc/apache2/apache2.conf; configuraciones por sitio en /etc/apache2/sites-available/.
  • RHEL/CentOS/AlmaLinux/Rocky: configuración principal /etc/httpd/conf/httpd.conf; configuración SSL /etc/httpd/conf.d/ssl.conf.

Nota: Si tu servidor Apache se ejecuta en Ubuntu, también puedes seguir nuestras instrucciones dedicadas de instalación de SSL para Ubuntu.

Paso 4: Configura el host virtual

Primero, haz una copia de seguridad de tu archivo de configuración actual. De esta manera, si algo sale mal, podrás revertir rápidamente tus cambios:

sudo cp /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.backup

Ahora abre el archivo de configuración y configura el host virtual HTTPS (puerto 443). Un host virtual completo y moderno se ve así:

<VirtualHost *:443>
    ServerName  www.example.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/example

    SSLEngine on

    # Apache 2.4.8+ : certificado del servidor + cadena intermedia en UN archivo
    SSLCertificateFile    /etc/ssl/example_com_fullchain.crt
    SSLCertificateKeyFile /etc/ssl/example_com.key

    # Endurecimiento de TLS recomendado (2026)
    SSLProtocol         -all +TLSv1.2 +TLSv1.3
    SSLHonorCipherOrder off

    # Indica a los navegadores que usen siempre HTTPS. Elimina el # inicial para habilitar HSTS,
    # pero solo después de haber confirmado que HTTPS funciona correctamente:
    # Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

    ErrorLog  ${APACHE_LOG_DIR}/example_error.log
    CustomLog ${APACHE_LOG_DIR}/example_access.log combined
</VirtualHost>

Sustituye example.com, la raíz de documentos y las rutas de archivo con tus propios valores. Esto es lo que hacen las directivas clave:

  • SSLEngine on – habilita SSL/TLS para este host virtual.
  • SSLCertificateFile – ruta a tu archivo de cadena completa (certificado + intermedios) creado en el Paso 1. En Apache 2.4.8+ esta única directiva reemplaza la obsoleta SSLCertificateChainFile.
  • SSLCertificateKeyFile – ruta a tu clave privada, generada junto con el CSR.
  • SSLProtocol -all +TLSv1.2 +TLSv1.3 – deshabilita los protocolos SSL/TLS antiguos e inseguros y permite solo TLS 1.2 y TLS 1.3.
  • Strict-Transport-Security (HSTS) – indica a los navegadores que se conecten solo mediante HTTPS. Requiere mod_headers (habilitado en el Paso 2). Actívalo solo después de haber confirmado que HTTPS funciona correctamente.

Asegúrate de que ninguna de estas líneas comience con un # (lo que las convertiría en comentarios). En Debian/Ubuntu, ${APACHE_LOG_DIR} se resuelve como /var/log/apache2; en sistemas basados en RHEL usa en su lugar /var/log/httpd/.

Servidores heredados: Si estás usando una versión de Apache anterior a 2.4.8, mantén el certificado y la cadena en archivos separados y añade la directiva obsoleta SSLCertificateChainFile /etc/ssl/example_com.ca-bundle debajo de SSLCertificateFile. En cualquier servidor moderno, se prefiere el enfoque de cadena completa mencionado anteriormente.

Endurecimiento avanzado (opcional): para un conjunto de cifrado más robusto y OCSP stapling, genera una configuración a medida con el Generador de Configuración SSL de Mozilla. OCSP stapling también requiere una directiva SSLStaplingCache en tu configuración global de Apache.

Habilita el sitio: En Debian/Ubuntu, un host virtual colocado en /etc/apache2/sites-available/ no se carga hasta que lo habilites. Si guardaste esta configuración como un archivo nuevo (por ejemplo example-ssl.conf), activalo con:

sudo a2ensite example-ssl.conf

También puedes editar el archivo predeterminado default-ssl.conf, pero este también debe habilitarse con a2ensite default-ssl. En RHEL/CentOS/AlmaLinux/Rocky, los archivos en /etc/httpd/conf.d/ se cargan automáticamente — pero ten en cuenta que ssl.conf ya incluye por defecto un bloque <VirtualHost _default_:443> con un certificado autofirmado, así que edita ese bloque o añade tu host virtual como un archivo separado como /etc/httpd/conf.d/yourdomain.conf para evitar dos hosts superpuestos en el puerto 443.

Paso 5: Redirige HTTP a HTTPS

Para asegurarte de que los visitantes siempre lleguen a la versión segura de tu sitio, añade un segundo host virtual en el puerto 80 que redirija permanentemente todo el tráfico HTTP a HTTPS:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect permanent / https://www.example.com/
</VirtualHost>

Paso 6: Prueba tu configuración y reinicia Apache

Prueba siempre tu configuración antes de reiniciar. Un error de sintaxis puede dejar tu sitio fuera de línea, así que ejecuta:

sudo apachectl configtest

Si todo es correcto, verás:

Syntax OK

Ahora aplica los cambios recargando Apache (una recarga activa la nueva configuración sin cortar las conexiones existentes):

sudo systemctl reload apache2     # Debian/Ubuntu
sudo systemctl reload httpd       # RHEL/CentOS/AlmaLinux/Rocky

Si una recarga no es suficiente, reinicia el servicio en su lugar (sudo systemctl restart apache2 o httpd). En sistemas más antiguos sin systemd, usa sudo apachectl graceful.

Si la instalación fue exitosa, ¡felicidades! Tu sitio web ahora está protegido con SSL/TLS.

Prueba tu instalación SSL

Después de instalar tu certificado SSL en Apache, verifica que todo funcione como se espera. Un escaneo instantáneo revelará cualquier error o vulnerabilidad que pueda afectar el rendimiento de tu certificado. Usa nuestra herramienta SSL Checker para comprobar el estado de tu instalación.

También puedes confirmar el certificado y su cadena directamente desde la línea de comandos:

openssl s_client -connect www.example.com:443 -servername www.example.com

¿Dónde comprar un certificado SSL para Apache?

El mejor lugar para obtener un certificado SSL para Apache es SSL Dragon. Ofrecemos precios y descuentos inmejorables en toda nuestra gama de productos SSL, y hemos seleccionado cuidadosamente las mejores marcas SSL del mercado para equipar tu sitio web con una protección a prueba de balas. Todos nuestros certificados SSL son compatibles con Apache. ¡Obtén un certificado SSL ahora!

Ten en cuenta que la vida útil de los certificados SSL/TLS se está reduciendo: la validez máxima baja a 200 días en marzo de 2026, a 100 días en 2027, y a solo 47 días en 2029. Los ciclos de vida más cortos implican renovaciones más frecuentes, por lo que vale la pena planificar tu proceso de renovación (y su automatización) con antelación.

Preguntas frecuentes

¿Qué es SSL en Apache?

SSL (Secure Sockets Layer), ahora sucedido por TLS (Transport Layer Security), es un protocolo criptográfico que cifra la comunicación entre dos puntos finales de red, por ejemplo un servidor web como Apache y el navegador de un usuario.

¿Cómo sé si SSL está habilitado en Apache?

En distribuciones Debian y Ubuntu, busca en la configuración la directiva del protocolo SSL:

grep -ir SSLProtocol /etc/apache2/

Si SSL está configurado, verás una salida similar a:

/etc/apache2/mods-available/ssl.conf:SSLProtocol +TLSv1.2 +TLSv1.3

También puedes confirmar que el módulo SSL está cargado en el servidor en ejecución:

apachectl -M | grep ssl

¿Dónde está el archivo .conf de SSL en Apache?

El archivo de configuración puede residir en diferentes ubicaciones según tu sistema operativo y configuración. En Debian/Ubuntu, revisa /etc/apache2/apache2.conf y los archivos por sitio en /etc/apache2/sites-available/. En RHEL/CentOS/AlmaLinux/Rocky, revisa /etc/httpd/conf/httpd.conf y /etc/httpd/conf.d/ssl.conf.

¿Cuál es la diferencia entre SSLCertificateFile y SSLCertificateChainFile?

SSLCertificateFile apunta a tu certificado de servidor. Desde Apache 2.4.8, el mismo archivo también puede contener los certificados intermedios, por lo que sirve la cadena completa. SSLCertificateChainFile era la forma antigua de proporcionar esos intermedios por separado, pero está obsoleta desde Apache 2.4.8. En cualquier servidor moderno, coloca el certificado y los intermedios en un solo archivo y hazlo referencia únicamente con SSLCertificateFile.

Ahorre un 10% en certificados SSL al realizar su pedido hoy mismo.

Emisión rápida, cifrado potente, 99,99% de confianza del navegador, asistencia dedicada y garantía de devolución del dinero en 25 días. Código del cupón: SAVE10

Una imagen detallada de un dragón en vuelo
Escrito por

Redactor de contenidos experimentado especializado en Certificados SSL. Transformar temas complejos de ciberseguridad en contenido claro y atractivo. Contribuir a mejorar la seguridad digital a través de narrativas impactantes.