Instalar Apache2 con SSL en Ubuntu

SSL es un sistema que permite que la información se transmita de forma encriptada a través de Internet, muy empleado en el comercio electrónico, es el candado que observamos en la barra de direcciones de algunas webs.
Con este tutorial se pretende mostrar la forma de configurarlo en un servidor Apache2, si bien puede haber cosas que no funcionen, todo depende de la distribución y la versión de Linux que se use. Este tutorial fue realizado usando Ubuntu 7.10.
Para empezar, sino tenemos instalado Apache lo instalamos:

sudo aptitude install apache2

A continuación habilitaremos los módulos ssl y rewrite:

a2enmod ssl

a2enmod rewrite

Generamos el certificado:

apache2-ssl-certificate

Si nos aparece un mensaje de error diciendo que el comando no existe haremos lo siguiente:

sudo aptitude install ssl-cert

openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/apache.pem -keyout /etc/apache2/apache.pem

Rellenamos los campos que nos solicita.

Modificamos el fichero /etc/apache2/sites-enabled/ssl:

sudo nano /etc/apache2/sites-enabled/ssl

Añadimos:

SSLEngine On

SSLCertificateFile /etc/apache2/apache.pem

Si hemos creado una carpeta donde alojaremos las webs añadiremos en todas las líneas donde aparezca /var/www el nombre de la carpeta, así, si creamos una carpeta llamada websegura quedará de ésta forma:

/var/www/websegura

Modificamos también el fichero /etc/apache2/sites-enabled/000-default(o solo default, según versión):
sudo nano /etc/apache2/sites-enabled/000-default

y añadimos:

Debajo de NameVirtualHost *:80–>
NameVirtualHost *:443
Debajo de DocumentRoot /var/www/–>
RewriteEngine on
RewriteLog /var/log/apache2/https_rewrite.log
RewriteLogLevel 1
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]
Al final del documento–>
< VirtualHost *:443 >
DocumentRoot /var/www
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/apache.pem
< /VirtualHost >

Abrimos el fichero /etc/apache2/ports.conf y comprobamos que exista lo siguiente, sino lo añadimos:

Listen 80
Listen 443

Abrimos el fichero /etc/apache2/apache2.conf y añadimos al final:

ServerName 127.0.0.1

Finalmente reiniciamos el demonio de Apache:

sudo /etc/init.d/apache2 force-reload

Posibles problemas que pueden surgir en la configuración:

  • Comprueba que los ficheros de tu web tengan como propietario al usuario www-data y no a root, para ello ve hasta el directorio /var/www y con ls -l observa quien es el propietario de los ficheros, para cambiarlo: sudo chown nombredeusuario nombredefichero.
  • Revisa los permisos, en concreto del fichero /etc/apache2/apache.pem, cambia los permisos de este fichero o de cualquier otro con chmod. Su sintaxis es chmod numero fichero. Ejemplo: sudo chmod 755 /etc/apache2/apache.pem.
  • Si no tuvieras el paquete openssl instalado instálalo: sudo aptitude install openssl
  • Después de cada cambio importante reinicia el demonio de Apache.

Para ver el certificado SSL en funcionamiento escribiremos en el navegador http://localhost/, automáticamente nos redirigirá a https…

ssl

banner