Let’s Encrypt: ¡al rico certificado de piña, para el niño y la niña!

Hace unos 5 meses puse a funcionar una herramienta que está haciendo las delicias de mi calendario de notificaciones, porque simplemente estoy borrando todos los recordatorios para renovar certificados SSL de los dominios que mantengo, que no son pocos. Y lo mejor de todo, automáticamente se solicitan y renuevan los certificados con la Autoridad Certificadora. Explico cómo lo he montado.

Para ello vamos a usar la herramienta oficial de Let’s Encrypt. Como root iniciamos el proceso

apt-get install git
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt/

cd letsencrypt

service apache2 stop
Antes de generar las key y generar los certificados vamos a configurar el VirtualHost:443 correspondiente añadiendo dentro
SSLEngine on
 SSLCertificateFile    /etc/letsencrypt/live/www.tudominio.com/fullchain.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/www.tudominio.com/privkey.pem
 SSLCACertificateFile /etc/apache2/ssl/letsencrypt-authorityX3.crt

Lanzamos la herramienta de letsencrypt

./letsencrypt-auto certonly -a manual -d www.tudominio.com --server https://acme-v01.api.letsencrypt.org/directory
./letsencrypt-auto certonly -a standalone -d www.tudominio.com --server https://acme-v02.api.letsencrypt.org/directory

Esto generará los certificados necesarios y los pondrá en los path que hemos indicado en SSLCertificateFile y SSLCACertificateFile. También hace falta bajarse los certificados intermedios de aquí https://letsencrypt.org/certificates/ y lo puedes poner en /etc/apache2/ssl/letsencrypt-authorityX3.crt tal como he indicado antes con la directiva de apache SSLCACertificateFile. Y ahora iniciamos de nuevo apache. Lo hemos apagado previamente porque si no al lanzar ./letsencrypt-auto en standalone genera un error

http-01 challenge for www.tudominio.com Cleaning up challenges Problem binding to port 80: Could not bind to IPv4 or IPv6.

…ahora ya sí, lanzamos el apache

service apache2 start

por último añadir en el crontab de root lo siguiente para renovar los certificados de forma automática

 0 0 * * * cd /root/letsencrypt/ && ./letsencrypt-auto renew --standalone

Si letsencrypt-auto lo has lanzado con la opción «-a manual» cuando llegue el momento de actualizarse, dará un error y el certificado no se actualizará por lo que en el renew configurado en el cron puede dar este error

letsencrypt-auto PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',). Skipping.

en caso de que te ocurriera (como me pasó a mi, que por eso se ve tachada una línea más arriba) la solución es esta:

 ./letsencrypt-auto renew -v --standalone --no-directory-hooks --pre-hook "service apache2 stop" --post-hook "service apache2 start"

./letsencrypt-auto renew --force-renewal --standalone --preferred-challenges http

Y esto es todo. Sólo reseñar que el nuevo editor por bloques de wordpress apesta. Saludos!