Obtén certificados SSL gratuitos y renuévalos de forma automática.

Muy buenas, en esta ocasión os traigo el como usar Let's encrypt para obtener certificados SSL gratuitos para tanto dominios y subdominios como se os antoje, ademas lo vamos a hacer con un método que elimina la necesidad de parar nuestro servidor web.

Vamos a utilizar un cliente alternativo de Let's Encrypt llamado Dehydrated, ademas vamos a utilizar la API del proveedor de DNS CloudFlare para hacer las validaciones del dominio, quiero apuntar que otros proveedores también son validos pero el proceso puede variar.

Primero recordad que necesitamos un entorno unix-like (preferiblemente Linux), en este caso los comandos van a corresponder a Debian 8 Jessie pero no deberían de variar mucho en otras distribuciones.

1. Instalando dependencias

Tanto Dehydrated como Lexicon (el hook que vamos a utilizar para consumir la API de CloudFlare) tienen dependencias por lo que las debemos satisfacer con el siguiente comando:

apt-get install -y openssl curl sed grep mktemp git build-essential python-dev curl libffi-dev libssl-dev python-pip

2. Instalando y configurando Dehydrated y Lexicon

Bien ahora nos toca instalar Dehydrated los vamos a hacer por medio de git y lo vamos a guardar en /srv/letsencrypt para hacerlo simplemente ejecutad el siguiente comando:

git clone https://github.com/lukas2511/dehydrated.git /srv/letsencrypt && cd /srv/letsencrypt && chmod +x dehydrated

ahora nos tocara instalar lexicon para ello esta vez usaremos la herramienta pip de python.

pip install requests[security]
pip install dns-lexicon

para terminar nos descargaremos un pequeño script que nos permitirá usar Lexicon con Dehydrated.

curl -LOk https://gist.githubusercontent.com/claudio4/08facce8547d5771b65c3d9829181f11/raw/e163077354d83f9bf8fb409276a275917a26c363/lexicon.hook.sh && chmod +x /srv/letsencrypt/lexicon.hook.sh

Ahora crearemos un archivo config.sh en la raiz de la carpeta de letsencrypt (/srv/letsencrypt) y pondremos el contenido de este pastebin pero modificando el campo del email.

3. Añadiendo dominios

Primero debemos recordar que todo dominio que queramos añadir debe ser gestionado por el proveedor DNS del cual tenemos el hook, en el caso de esta guía CloudFlare.

Para añadirlos simplemente tenemos que editar (o crear) el archivo domains.txt y añadir los dominios y subdominios que queramos sabiendo que cada nueva linea representa un archivo de certificado diferente, el primer dominio/subdominio sera el nombre común del certificado.

Así pues si queremos el a.com y b.com en distintos archivos con un nombre comun de www y adicionalmente queremos que el certificado de a.com también cubra el subdominio mail nuestro archivo quedara de la siguiente forma:

www.a.com a.com mail.a.com
www.b.com b.com

Me gustaría señalar que podemos editar este archivo en cualquier momento y añadir o quitar dominios/subdominios, con la simple condición de que se vuelva a ejecutar el comando para generar los certificados que se especificara más adelante.

4. Generando los certificados

Para ello simplemente tendremos que establecer las variables de entorno y ejecutar Dehydrated.

Para el caso de CloudFlare se haría con el siguiente comando cambiando el mail y el token por los correspondientes a vuestra cuenta:

export PROVIDER=cloudflare && \
export LEXICON_CLOUDFLARE_USERNAME=CF_USERNAME && \
export LEXICON_CLOUDFLARE_TOKEN=CF_TOKEN && \
/srv/letsencrypt/dehydrated --cron -f /srv/letsencrypt/config.sh

Cuando el proceso acabe ya tendremos los certificados generados en la carpeta certs.

5. Automatizando la renovación

Los certificados que ofrece Letsencrypt son únicamente validos durante 90 días, aunque se pueden renovar sin limites, para automatizar este proceso echaremos mano de cron.

simplemente editaremos el archivo de cron con crontab -e y añadiremos el tiempo que creamos estimado y el comando del paso anterior seguido de &&
comando para reiniciar vuestro servidor web
, un ejemplo en el que se usaría nginx y se comprobaría cada 15 días sería el siguiente:

30 23 */15 * * export PROVIDER=cloudflare && export LEXICON_CLOUDFLARE_USERNAME=CF_USERNAME && export LEXICON_CLOUDFLARE_TOKEN=CF_TOKEN && /srv/letsencrypt/dehydrated --cron -f /srv/letsencrypt/config.sh

Es importante recalcar que Dehydrated solo renovara los certificados si quedan 30 días o menos para que caduquen.

Si usáis Nginx podéis ejecutar este script que he escrito, en vez del supercomando anterior.

El script ejecutaría todo y ademas comprobaría la config de Nginx antes de reiniciar, ya que si Nginx se reinicia con una config invalida fallara en el arranque lo cual es peligroso.

The end

Pues eso es todo con eso ya tendréis certificados gratuitos e ilimitados de forma automática.

Un saludo y sentiros libres de escribir en los comentarios vuestras dudas.

P.D.: Esta guía esta basada en la de SparkTree.

Claudio4

Soy un joven desarrollador apasionado por la tecnología y las ciencias, especialmente interesado en el código libre y amante de las soluciones self-hosted.

Universo observable https://www.claudio4.com

Subscribe to Developing on my way

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!