Ago 192016
 
Artículo Administración de Servidores

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

A continuación, instalamos el software Let’s Encrypt bajo el directorio “/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

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

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

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:

Al finalizar, se presenta el siguiente mensaje:

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:
  • 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

Verificación

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

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”:

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:

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:

Instalación del certificado en otro tipo de servidor web

Al pasarle la opción “–apache” al comando letsencrypt-auto, se actualiza automáticamente la configuración del servidor web para hacer uso del certificado generado.

Pero si estamos utilizando otro tipo de servidor, o queremos realizar manualmente las modificaciones necesarias en los ficheros de configuración del servidor web, podemos utilizar en su lugar la opción “–certonly”, junto con las opciones “–webroot” y “–webroot-path </path/del/documentroot>”.

Por ejemplo, si el DocumentRoot de nuestro dominio “ejemplo.com” es “/var/www/ejemplo.com”, el comando a utilizar sería de la forma:

Atención: Durante el proceso de generación del certificado, el comando letsencrypt-auto crea un subdirectorio “.well-known/acme-challenge” bajo el directorio especificado en la opción webroot-path (el DocumentRoot), y deposita en el mismo una serie de ficheros de prueba, a los que después intenta acceder con urls de la forma “http://www.ejemplo.com/.well-known/acme-challenge/*”.

Por esta razón, hay que asegurarse de que no haya ninguna sentencia en la configuración del servidor web que impida el acceso a ficheros en dicha ruta.

Referencias

 Publicado por en 8:03 am

 Deja un comentario

(requerido)

(requerido)