La chuletilla de hoy va para recordar la forma de montar un servidor virtual en Apache2 que use https en lugar de http. Vamos allá.
Lo primero que necesitamos es generar el certificado que usará nuestro servidor web. Para ello creamos un directorio donde alojarlo y usarmos el script make-ssl-cert
que traen las distribuciones Debian actuales (hasta hace bien poco este script se llamaba apache2-ssl-certificate
)
nim:/usr/sbin# mkdir /etc/apache2/ssl
nim:/usr/sbin# /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
nim:/usr/sbin# ls -l /etc/apache2/ssl
total 4
-rw------- 1 root root 1884 2008-09-22 12:44 apache.pem
lrwxrwxrwx 1 root root 10 2008-09-22 12:44 f4ec70de -> apache.pem
A continución instalamos el módulo que habilita a Apache para usar SSL:
nim:/usr/sbin# a2enmod ssl
Module ssl installed; run /etc/init.d/apache2 force-reload to enable.
nim:/usr/sbin# /etc/init.d/apache2 restart
Forcing reload of web server (apache2)... waiting .
Añadimos ahora la línea Listen 443
en el fichero /etc/apache2/ports.conf
Luego, creamos el fichero de configuración del nuevo servidor web virtual (que en este ejemplo se llamará webssl) en el directorio /etc/apache2/sites-available
. Su contenido podría ser algo así:
NameVirtualHost *:443
<VirtualHost *:443>
ServerName webssl.midominio.es
DocumentRoot /var/www/webssl
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
</VirtualHost>
Finalmente habilitamos el nuevo servidor con este comando:
nim:/usr/sbin# a2ensite webssl
Y sólo una nota para terminar. Lo normal es que el servidor web por defecto de apache esté apuntando a /var/www
y, tal y como hemos contado esto, también podríamos acceder a estas mismas páginas a través de una conexión no cifrada usando la ruta http://www.midominio.es/webssl/
. Para evitar esto tenemos dos opciones: colocar nuestro nuevo servidor virtual en una ruta diferente que no dependa jerárquicamente de la del servidor por defecto de apache o, si preferimos tener todas nuestras webs aquí, colocar una directiva en el fichero de configuración de nuestro servidor web por defecto (fichero default
en /etc/apache2/sites-available
) que deniegue el acceso al directorio que queremos proteger. Algo así:
<Directory /var/www/webssl>
Order deny,allow
Deny from all
</Directory>
Muchas gracias compañero. Más aún viniendo de tí. No somos dignos 🙂
Además de ser de lo más correcto, como siempre muy bien explicado, saludos -;)