Montar una web segura y confiable gracias a Letsencrypt

Xabi
The Sysadmin
Published in
3 min readNov 4, 2015

ACTUALIZACIÓN: este artículo ha quedado desfasado tras la finalización de la fase BETA de Let’s Encrypt. Si quieres obtener certificados seguros para tu servidor, sigue las instrucciones de Certbot

Gracias a Letsencrypt ya es posible obtener certificados SSL, confiables para los principales navegadores, de forma sencilla y gratuita. A continuación explico cómo usarlo.

Participar en el programa BETA

De momento está en fase BETA. Si queremos disponer de certificados firmados por la entidad certificadora de Let’s Encrypt, antes de nada deberemos solicitar entrar en el programa BETA:

Formulario para participar en el programa BETA

En mi caso, tras unas 2–3 semanas, me han contestado que aceptaban mis dominios. Es importante solicitar todos los dominios que necesites desde el inicio. Sino, tendrás que volver a rellenar la solicitud (y volver a esperar).

Descargar el cliente de Letsencrypt

Tras recibir la confirmación, lo primero que hay que hacer es descargarse el cliente, el cual nos ayudará a generar nuestros certificados. Este proceso hay que realizarlo en el mismo servidor donde tenemos nuestra web.

# Si no lo tenemos instalado, instalaremos Git
apt-get install git
# Después descargaremos el cliente en /opt/letsencrypt
cd /opt/
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
# Comprobar que funciona correctamente (no te asustes; la primera vez instala todas las dependencias necesarias)
./letsencrypt-auto --help

Obtener los certificados

El cliente de Let’s Encrypt está preparado para obtener los certificados y configurar automáticamente nuestro servidor web (Apache/Nginx), de forma que el proceso sea lo más sencillo posible para el usuario.

Atención: si el Apache o cualquier otro servicio que escuche en el puerto 80/TCP está ejecutándose, tendrás que pararlo momentáneamente hasta terminar el proceso.

Proceso automático:

# Obtener e instalar el certificado en tu web
./letsencrypt-auto \
--server https://acme-v01.api.letsencrypt.org/directory
Nota: en el email que nos envían al aceptarnos en la fase Beta, nos indican que hay que incluir el argumento --server API URL. Supongo que tras la fase BETA se podrá omitir.

En mi caso, al ser un sistema en producción y con múltiples virtual hosts configurados en Apache, he preferido realizar el proceso de forma manual (que no es nada complicado).

Proceso manual:

# Generamos el certificado para nuestra web
./letsencrypt-auto --agree-dev-preview --server https://acme-v01.api.letsencrypt.org/directory certonly

El script nos preguntará por un email de contacto y el dominio de nuestra página web. Nos dejará los certificados en el siguiente path:

/etc/letsencrypt/live/domain.com/

Si entramos en el directorio, veremos estos ficheros:

cert.pem       # Certificado de servidor
chain.pem # Certificados necesarios para el navegador
privkey.pem # Llave privada (¡no compartir!)
fullchain.pem # Todos los certificados

Los tres primeros los utilizaremos en la configuración de Apache. Suponiendo que ya tenemos montado nuestro sitio seguro en Apache con certificados autofirmados, tendremos que utilizar esta configuración para cambiar a nuestros certificados confiables:

# SSL
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/domain.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain.com/privkey.pem
SSLCertificateChainFile
/etc/letsencrypt/live/domain.com/chain.pem
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
# MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

Tras reiniciar el servicio de Apache, nuestro sitio web seguro debería estar en marcha. Compruébalo accediendo a https://dominio.com con tu navegador favorito, o mejor aún, utilizando un test de servidor SSL.

Si en el test observas que tu certificado es confiable, pero te sugiere mejorar la configuración de tu servidor seguro, no olvides desactivar SSLv3 o seguir las recomendaciones de Security Labs.

Actualización: he tenido que incluir la directiva SSLCertificateChainFile con el chain.pem para que funcione bien en mi configuración

--

--