13 mayo 2013

Habilitar HTTPS en apache

En algunas ocasiones (envío de formularios, páginas de autenticación, etc.) es necesario que nuestro servidor web pueda entregar páginas cifradas bajo el protocolo seguro HTTPS. En este artículo se muestran cuales son los pasos a seguir para i) generar un certificado SSL autofirmado y ii) configurar convenientemente el servidor apache2 para que pueda entregar la página https://www.midominio.com.

1. Creación de un certificado SSL autofirmado

En primer lugar crearemos el directorio /etc/apache2/ssl que es el lugar donde dejaremos las claves pública y privada del certificado SSL. Posteriormente, crearemos un certificado SSL para el dominio "midominio.com" con una validez de 365 días.
$ sudo mkdir /etc/apache2/ssl
$ sudo openssl req -new -x509 -days 365 -nodes \
  -out /etc/apache2/ssl/midominio.com.pem \
  -keyout /etc/apache2/ssl/midominio.com.key
Generating a 1024 bit RSA private key
................................................................+++
........................................................+++
writing new private key to '/etc/apache2/ssl/midominio.com.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Provincia
Locality Name (eg, city) []:Ciudad
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Mi organización
Organizational Unit Name (eg, section) []:Departamento
Common Name (e.g. server FQDN or YOUR name) []:www.midominio.com
Email Address []:contacto@midomino.com
Por defecto, cuando se crean los archivos para las claves pública y privada del certificado SSL, se le asignan unos permisos que permiten el acceso de cualquier usuario. Dado que la clave privada debe de ser privada (únicamente debe de ser accesible por su propietario), procederemos a cambiar los permisos del fichero.
$ sudo chmod 400 /etc/apache2/ssl/midomino.com.key
$ ls -l /etc/apache2/ssl
total 8
-r-------- 1 root root 1505 mai 10 13:12 midominio.com.key
-r--r--r-- 1 root root 1708 mai 10 13:12 midominio.com.pem
2. Configuración del servidor apache2

Ahora que ya tenemos ubicadas las claves pública y privada para nuestro domino, ya podemos proceder a la configuración de apache2.

El primer paso será el de habilitar el módulo SSL de apache.
$ sudo a2enmod ssl
Enabling module ssl.
See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
service apache2 restart
A continuación, modificaremos la configuración de Apache para que también escuche peticiones por el puerto 443 (que es el puerto por defecto para el protocolo HTTPS).
$ sudo vim /etc/apache2/ports.conf
Listen 80
Listen 443
Comprobamos, para nuestro servidor, los sites que están disponibles y los que están habilitados
$ ls -l /etc/apache2/sites-available/
total 12
-rw-r--r-- 1 root root 1779 mai  3 13:14 default
-rw-r--r-- 1 root root 7469 feb  7  2012 default-ssl

$ ls -l /etc/apache2/sites-enabled/
total 0
lrwxrwxrwx 1 root root 26 mar 11 13:50 000-default -> ../sites-available/default
De los listados anteriores se comprueba que, aunque se habilite el módulo SSL, esta acción no habilita el sitio (default-ssl) automáticamente. Hay que activarlo de forma manual. Una vez habilitado el sitio, podemos comprobar que, efectivamente, el sitio default-ssl está activado.
$ sudo a2ensite default-ssl
Enabling site default-ssl.
To activate the new configuration, you need to run:
service apache2 reload

$ ls -l /etc/apache2/sites-enabled/
total 0
lrwxrwxrwx 1 root root 26 mar 11 13:50 000-default -> ../sites-available/default
lrwxrwxrwx 1 root root 30 mai 10 11:50 default-ssl -> ../sites-available/default-ssl
Ya solo queda editar el fichero de configuración del nuevo site para añadir la configuración del VirtualHost para el dominio www.midominio.com permitiendo así el acceso a la página cifrada https://www.midominio.com
$ sudo vim /etc/apache2/sites-available/default-ssl
<VirtualHost *:443>
   ServerAdmin contacto@midominio.com
   ServerName www.midominio.com
   DocumentRoot /var/www/vhosts/midominio.com/
   ErrorLog /var/log/apache2/midominio.com-error-ssl.log
   CustomLog /var/log/apache2/midominio.com-access-ssl.log combined
   SSLEngine On
   SSLCertificateFile /etc/apache2/ssl/midominio.com.pem
   SSLCertificateKeyFile /etc/apache2/ssl/midominio.com.key
</VirtualHost>
Finalmente, para que todos los cambios efectuados sean operativos, hay que reiniciar el servicio apache.
$ sudo service apache2 restart
 * Restarting web server apache2... 
waiting                                                           [ OK ]
Error de confianza

Dado que el certificado que hemos generado más arriba no está generado por una CA (Autoridad Certificadora) de confianza, cuando intentemos acceder a la página en cuestión, el navegador mostrará un error en el certificado.

0 comentarios: