Let’s Encrypt

El otro día me llegó un comentario en Ivoox donde alguien, siento no poder identificarle porque se anunció como anónimo, comentaba que aún siendo una persona con conocimientos y experiencia en Linux la configuración de OpenVPN le tiraba para atrás y claro, me ha hecho pensar.

También he visto en el podcast que hay gente que lo vota en Ivoox como Tomás Vilariño, PJ Cleaner, RaulBueno, Overdrv, y alguno que me dejo porque ahora no me acuerdo, muchas gracias, la verdad es que estas cosas motivan y hay que agradecerlo mucho porque estar grabando y tener feedback es lo mejor que te puede pasar con un podcast.

Este es un podcast hecho para todos aquellos que lo escucháis y no es un compendio de discursos sobre temas técnicos, ya solo faltaba a estas alturas que uno se ponga a dar discursos y charlas a la gente.

Así que volviendo al comentario del OpenVPN he estado pensando y creo que voy a intentar tratar los temas intentando quitarle complejidad al asunto, voy a intentar trabajar en el contenido para conseguir eso, así que os invito a que me contéis si lo voy consiguiendo o no para ir guiando un poco este programa que al final la idea es ir haciéndolo entre todos.

Por supuesto si queréis que toque algún tema me lo podéis comentar y podemos negociarlo porque tendré que preparármelo un poco.

Hoy voy a empezar con esa tónica que me gustaría ir cogiendo, así que hoy toca Let’s Encrypt que Iñaki, el todo poderoso del Mundo IMD y de imd.guru me había pedido.

Lo primero que voy a hacer es contar como se haría en Neodigit, algo fácil y sin ningún tipo de complicación.

En Neodigit lo único que hay que hacer para poder instalar el certificado de Let’s Encrypt es ir al alojamiento en cuestión y pinchar en la opción Certificados SSL, luego le daremos al botón Crear, seleccionamos los dominios, subdominios o alias donde instalar y le daremos Autorizar Seleccionados. Con esto ya hemos terminado, ¿veis? ¿a qué es sencillo?

Pero bueno, además de hacerlo en Neodigit con un click y de forma fácil y sencilla querréis saber hacerlo en un servidor estándar en un servidor sin panel o en un servidor que no esté en Neodigit.

Ya os aviso que es posible hacerlo, pero no esperéis algo mágico de copio dos líneas y ya está, no es fácil, es complicado aunque no imposible, así que si lo que queréis es simplemente poner un certificado en una web, lo suyo es traerla a Neodigit y hacerlo con el panel este tan fantástico que tenemos y que lo hace todo por nosotros. De eso de todos modos ya hablaremos con más detenimiento si queréis.

Así que ahora vamos a contar como hacerlo a pelo, directamente en la consola de un servidor recién instalado con una Ubuntu 16.04, vamos allá.

Tenemos que tener en cuenta unos requisitos, que son que el host resuelva correctamente al DNS para poder validar por parte de let’s encrypt, que nuestro puerto 80 esté abierto, ya que es por donde se va a validar y ya está.

Lo primero una vez tengamos el servidor será instalar apache, porque necesitamos un servidor web, así que lo haremos con

apt-get install apache2

Y ahora iremos a por el certificado

apt-get install letsencrypt

Y generamos el certificado:

root@s2:~# letsencrypt certonly --webroot -w /var/www/html/ -d s2.eduardocollado.com \
--email edu@cxxxgi.com --agree-tos

IMPORTANT NOTES:
 - If you lose your account credentials, you can recover through
   e-mails sent to edu@cxxxgi.com.
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/s2.eduardocollado.com/fullchain.pem. Your
   cert will expire on 2017-06-27. To obtain a new version of the
   certificate in the future, simply run Let's Encrypt again.
 - Your account credentials have been saved in your Let's Encrypt
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Let's
   Encrypt so making regular backups of this folder is ideal.
 - If you like Let's Encrypt, please consider supporting our work by:

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

Ahora para que funcione https tenemos que habilitar el ssl en nuestro apache

a2enmod ssl

Y ya sólo queda configurar el fichero /etc/apache2/sites-available/default-ssl.conf

donde simplemente sustituiremos las líneas

#   SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
#   SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
    SSLCertificateFile /etc/letsencrypt/live/s2.eduardocollado.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/s2.eduardocollado.com/privkey.pem

Reiniciamos apache y ya lo tenemos

/etc/init.d/apache2 restart

Ahora, ¿cómo vamos a renovarlo?, pues simplemente introduciendo en el cron del servidor una línea para que compruebe todos los días si caduca

* 2 * * * /usr/bin/letsencrypt renew >> /var/log/renovacion_lets_encrypt.log

Este procedimiento que os he contado es el estándar, pero tener en cuenta que hay otros scripts y alternativas que nos pueden hacer la vida más fácil u ofrecer otras posibilidades, pero si lo conseguís instalar así, seguro que os animáis y podéis buscar otras alternativas, incluso podemos verlas entre todos, no hay problema.

ACTUALIZACIÓN

Me comenta Iñaki que me faltaba la cadena intermedia y al comprobarlo en Crypto Report de Symantec pues era verdad, ni me había dado cuenta pues los navegadores no van a requerir el CA de let’s encrypt.

Así que la solución más fácil y rápida pasa por bajar el ca.cert de la web de let’s encrypt y bajar el fichero activo renombrandolo a ca.cert.

Una vez bajado en vuestro servidor añadiréis en el fichero /etc/apache2/sites-available/default-ssl.conf

SSLCACertificateFile /etc/letsencrypt/live/s2.eduardocollado.com/ca.cert

Yo lo he puesto en el mismo directorio que los demás. Y reiniciáis apache y ya lo tenéis funcionando.

No es necesario este paso pues los navegadores lo reconocen, pero lo que bien hecho está bien hecho parece.

Gracias Iñaki por el apunte ;-).