Ago 192016
 

Históricamente, la necesidad de implementar un protocolo seguro de comunicación entre un cliente y un servidor web sólo se presentaba para sitios que manejaban datos confidenciales de los usuarios, como por ejemplo las tiendas online. Sin embargo, desde que Google anunció a mediados de 2014 que el uso del protocolo seguro https iba a ser tenido en cuenta por el algoritmo que determina el posicionamiento (ranking) de las páginas en los resultados de búsqueda, cada vez son más los administradores de sitios web que se plantean la conveniencia de implementar este protocolo.

Para ello, hay que instalar y configurar un certificado SSL en el servidor. El proceso de solicitar un certificado, instalarlo y configurarlo ha sido tradicionalmente engorroso, y además era necesario adquirir el certificado desembolsando una cierta cantidad de dinero. La iniciativa Let’s Encrypt (promovida por Google), ha venido a solucionar este problema.

En este artículo se explica el procedimiento de instalación y configuración de un certificado SSL de Let’s Encrypt sobre un servidor Debian/Ubuntu que ejecuta un servidor web Apache.

Instalación del software

Comenzamos por actualizar  el sistema, e instalar el paquete git para poder acceder al repositorio de Let’s Encrypt

sudo apt-get update
sudo apt-get install git

A continuación, instalamos el software Let’s Encrypt bajo el directorio “/opt/letsencrypt”:

sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Configuración de apache

Exceptuando los casos más sencillos, la configuración más habitual de los servidores web utiliza el mecanismo de “VirtualHosts” para albergar más de un dominio en un mismo servidor.

Normalmente, el dominio principal es de la forma “www.ejemplo.com”, pero también pueden existir subdominios como por ejemplo “blog.ejemplo.com”, etc. Además, es conveniente configurar también el dominio base “ejemplo.com”, que suele ser redirigido con una redirección permanente 301 al dominio principal “www.ejemplo.com”.

Actualmente, el procedimiento de instalación de certificado SSL de Let’s Encrypt no permite que haya más de un VirtualHost en un mismo fichero de configuración, por lo que deberemos crear bajo el directorio “/etc/apache2/sites-available” un fichero para cada uno de ellos:

/etc/apache2/sites-available/www.ejemplo.com.conf – Dominio principal

<VirtualHost *:80>
    ServerName www.ejemplo.conf
    ...
</VirtualHost>

/etc/apache2/sites-available/blog.ejemplo.com.conf – Subdominio para el blog

<VirtualHost *:80>
    ServerName blog.ejemplo.conf
    ...
</VirtualHost>

/etc/apache2/sites-available/ejemplo.com.conf – Dominio base, que simplemente contiene una redirección a www.ejemplo.com

<VirtualHost *:80>
    ServerName ejemplo.com

    RewriteEngine On
    RewriteRule ^/(.*)$ https://www.ejemplo.com/$1 [L,R=301]

</VirtualHost>

Generación e instalación del certificado

Una vez preparada la configuración de apache, creamos el certificado, incluyendo el dominio principal y todos los subdominios a los que se aplica:

cd /opt/letsencrypt
./letsencrypt-auto --apache -d ejemplo.com -d www.ejemplo.com -d blog.ejemplo.com

Al finalizar, se presenta el siguiente mensaje:

 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/ejemplo.com/fullchain.pem. Your cert will
   expire on 2016-11-22. To obtain a new or tweaked version of this
   certificate in the future, simply run letsencrypt-auto again with
   the "certonly" option. To non-interactively renew *all* of your
   certificates, run "letsencrypt-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Comprobamos que la instalación del certificado ha realizado algunas modificaciones en los ficheros de configuración de apache:

  • En el fichero de configuración de cada dominio, añade una redirección 301 permanente de http a https:
    <VirtualHost *:80>
        ServerName www.ejemplo.conf
        ...
        RewriteEngine on
        RewriteCond %{SERVER_NAME} =www.ejemplo.conf
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
    </VirtualHost>
  • También crea para cada dominio un fichero de configuración específico para el acceso por SSL, en el que incluye las directrices de configuración del certificado SSL:
    /etc/apache2/sites-available/www.ejemplo.com-le-ssl.conf

    <IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerName www.ejemplo.conf
        ...
        SSLCertificateFile /etc/letsencrypt/live/ejemplo.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/ejemplo.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
    </VirtualHost>
    </IfModule>

Verificación

La configuración del sitio se puede comprobar haciendo uso del servicio online de ssllabs.com:

https://www.ssllabs.com/ssltest/analyze.html?d=www.ejemplo.conf

Renovación del certificado

La renovación de todos los certificados SSL instalados en el servidor se realiza ejecutando el comando letsencript-auto con la opción “renew”:

root@servidor:/# cd /opt/letsencrypt/
root@oservidor:/opt/letsencrypt# ./letsencrypt-auto renew

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/ejemplo.com.conf
-------------------------------------------------------------------------------

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/ejemplo.com/fullchain.pem (skipped)
No renewals were attempted.

Como vemos, se puede ejecutar el comando en cualquier momento, porque si los certificados no necesitan ser renovados no realiza ninguna acción.

Para automatizar la renovación, basta con introducir el comando como una entrada en crontab del usuario root:

30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log

Extensión del certificado a subdominios adicionales

Para añadir un subdominio a un certificado, se ejecuta de nuevo el mismo comando con el que se generó el certificado original, añadiendo el nuevo subdominio, y utilizando la opción “–expand”.

Por ejemplo, para añadir el subdominio “img.ejemplo.com” al certificado, utilizaremos el comando:

./letsencrypt-auto --expand \
             --apache -d ejemplo.com -d www.ejemplo.com -d blog.ejemplo.com -d img.ejemplo.com

Referencias

 Publicado por en 8:03 am

 Deja un comentario

(requerido)

(requerido)