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> read more