Intro

Desde que surgió Let’s Encrypt conseguir un certificado SSL para tu dominio es mucho más fácil y sobre todo, mucho más barato. Normalmente empleamos certbot como el daemon que se encarga de solicitar el certificado y renovarlo automáticamente. Recordemos que los certificados de Let’s Encrypt no duran más de tres meses por motivos de seguridad.

Sin embargo, certbot tiene unos requerimientos de software que no lo hacen compatible con versiones antiguas de Debian. Por eso hemos tenido que buscar alternativas para aquellos sistemas donde no era posible actualizar el sistema operativo a algo más actual.

La solución

La solución la encontré buscando en la web de Let’s Encrypt, concretamente en el apartado ACME client implementations.

Entre las diferentes opciones que se presentan, la que probamos y parece que funciona bien es acme.sh

En el readme del proyecto en github está muy bien explicado como instalar el script, generar los certificados e instalarlos después. En resumen seguimos los siguientes pasos.

Instalar acme.sh

wget -O -  https://get.acme.sh | sh

Al instalar, el script ya instala el cron para la renovación automática. Como crea un alias para acme.sh habría que salir de la sesión y volver a entrar para que el sistema reconozca el alias.

Crear el certificado

Para múltiples dominios empleamos el siguiente comando:

acme.sh --issue -d example.com -d www.example.com -d cp.example.com -w /home/wwwroot/example.com

Los certificados se instalan en el directorio .acme.sh que crea el script de instalación dentro del directorio de usuario.

Instalar el certificado en apache o nginx

Apache

acme.sh --install-cert -d example.com \
--cert-file      /path/to/certfile/in/apache/cert.pem  \
--key-file       /path/to/keyfile/in/apache/key.pem  \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd     "service apache2 force-reload"

Nginx

acme.sh --install-cert -d example.com \
--key-file       /path/to/keyfile/in/nginx/key.pem  \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd     "service nginx force-reload"

Con esto ya tenemos nuestro certificado funcionando.