Categorías: Tutoriales

Configurar soporte HTTPS en Apache

Este tutorial describe cómo poner en marcha un servidor web con soporte HTTPS. El procedimiento lo he utilizado en un equipo con Scientific Linux, distribución derivada de Red Hat, por lo que en esta distribución y en otras derivadas como Fedora o CentOS debería ser el mismo. En Ubuntu, Debian y compañía será muy similar pero cambiarán algunas rutas y el sistema de paquetería.

El certificado utilizado es autogenerado y suponemos que tenemos ya instalado Apache.

Instalación de OpenSSL y mod_ssl

Lo primero que necesitamos es tener instalado el software necesario, para ello a través de yum hacemos lo siguiente:

yum install mod_ssl openssl

Generación del certificado

Primero generamos la clave privada, elegimos algoritmo RSA y 1024 bits:

openssl genrsa -out ca.key 1024

Ahora generamos el CSR (Certificate Signing Request), un fichero que crea una entidad para pedirle a una tercera que lo firme, verificando así que los datos de la primera entidad son correctos. De esta forma unas entidades van certificando a otras creando una cadena de certificación, donde la primera entidad de llama la raí­z de certificación.

openssl req -new -key ca.key -out ca.csr

Finalmente, nos autofirmamos el certificado:

openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

Le hemos puesto un período de validez de un año, pero podéis cambiar a vuestro gusto este tiempo. OpenSSL os pedirá una serie de datos sobre el certificado y su entidad emisora (vosotros): correo electrónico, ciudad, país… a través de un interfaz en texto.

Cambio de rutas

El siguiente paso es mover los ficheros de la firma que acabamos de generar a la ruta correcta.

mv ca.crt /etc/pki/tls/certs
mv ca.key /etc/pki/tls/private/ca.key
mv ca.csr /etc/pki/tls/private/ca.csr

Configuración de Apache

Ya estamos listos para comenzar con la configuración de Apache. En las versiones más modernas de Apache, el fichero de configuración viene dividido en varios ficheros separados por temática para un acceso más rápido a la parte deseada. El fichero que vamos a editar es el siguiente: /etc/httpd/conf.d/ssl.conf.

Buscamos las siguientes líneas y le asignamos el valor correcto (no tienen por qué estar seguidas una de la otra):

SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key

Host virtual

Para terminar crearemos un host virtual donde indicaremos a Apache dónde buscar las peticiones dirigidas al puerto 443 (las peticiones HTTPS). Definimos un host virtual al final de /etc/httpd/conf/httpd.conf:

NameVirtualHost *:443

Y luego la definición de las características en sí:

<VirtualHost *:443>
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/ca.crt
        SSLCertificateKeyFile /etc/pki/tls/private/ca.key

        AllowOverride All

        DocumentRoot /var/www/httpsdocs
        ServerName nombresitio.com
</VirtualHost>

Reiniciar el servicio

Para que los cambios tengan validez, deberemos reiniciar el servicio:

service httpd restart

Y ya tendremos listo el sitio seguro. Tened en cuenta que como la firma es autogenerada, los navegadores no la contemplarán como segura y aparecerá la típica pantalla de “Error SSL” o similar, que seguro que conocéis.

F. Javier Carazo Gil

Cofundador de CODECTION, empresa especializada en WordPress, autor de un libro sobre WordPress (el primero en español) y multitud de artículos (en medios físicos y virtuales) sobre el tema. Participa en la comunidad WordPress de forma activa siendo parte del equipo organizador de la WordPress Meetup de Córdoba, dando charlas en diferentes WordCamp y siendo autor y coautor de multitud de plugins libres y premium para WordPress de gran éxito.

Ver comentarios

  • Y sirve para varios dominios??? que yo recuerde la última vez que lo intenté hace años sólo se podía tener un dominio, la verdad es que hace muchísimo que no lo toco.

  • @kFk: Con VirtualHosts podrás definir tantos dominios como necesites. Haces una entrada para cada uno con sus propia configuración, en la que básicamente defines el nombre del mismo, qué certificado usa y la ruta dónde está alojado.

  • Estimados, me tengo todo tal cual como aparece en este tutorial, pero al reiniciar el servicio me aparece el mensaje que hay un error en el archivo ssl.conf. Indica que el archivo ca.crt no se encuenta en la ruta especificada o que se encuentra vacío, pero verifiqué y sí se encuentra en la ruta.
    Alguien me podría decir que ocurre?

    • No he visto este error nunca :S, es raro, ¿has mirado en Google? ¿Alguien puede echarnos una mano?

      ¿La ruta estás seguro que es correcta? La idea sería hacer la ruta absoluta para salir de dudas.

  • Los archivos en centos no se deben mover, se deben de copiar, por seguridad, prueben con este comando:
    restorecon -RvF /etc/pki

Entradas recientes

DeepSeek

2 días hace

Contacto

2 semanas hace

Smart-tv mute

2 semanas hace

STEAM OS

3 semanas hace

2025

4 semanas hace

El podcast de Linux Hispano – #072 – El hardware libre debe consolidarse como el software libre

https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.

1 mes hace