Agregar certificado ssl con Let's Encrypt

Pre-requisitos
Antes de empezar deberás asegurarte de tener algunas cosas:


 * El servidor deberá tener Ubuntu LTS (Ej: 14.04, 16.04).


 * Debes controlar el nombre del dominio con el que quieres utilizar el certificado.


 * Crea un A Record que apunta el dominio a un IP público de tu servidor.


 * El reverse lookup IP -> nombre debe coincidir con el nombre DNS que tendrá el certificado

Instalación
Puede buscar la guia especifica para la version De sus sistema (UNIX o NO) y el Web Server a utilizar en puede mirar https://certbot.eff.org/

En todo caso para un Sistema Ubuntu puede seguir los siguiente pasos:

Actualiza los paquetes del servidor con el comando

sudo apt-get update

Luego, instala los paquetes git y bc con apt-get

sudo apt-get -y install git bc

Ahora, puedes clonar el repositorio Let's Encrypt en /opt, creando la carpeta /letsencrypt con el comando

sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Obtener el certificado
Para obtener el certificado, ejecutamos los siguientes comandos, con el webroot-path y el dominio cambiado:

$sudo wget https://dl.eff.org/certbot-auto $sudo chmod a+x certbot-auto $./certbot-auto certonly --standalone -d example.com

Agregar el certificado - Nginx Webserver
Si el comando anterior se ejecutó sin problemas verás un mensaje parecido a este:

IMPORTANT NOTES: - If you lose your account credentials, you can recover through e-mails sent to sammy@digitalocean.com - Congratulations! Your certificate and chain have been saved at  /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will expire on 2016-03-15. 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 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

Si todavía no tienes instalado nginx, debes instalarlo con apt-get:

sudo apt-get install nginx

Para asegurar que el directorio es accesible para Let's Encrypt, se debe modificar el archivo de configuración del Nginx, agregando el bloque:

location ~ /.well-known { allow all; }

O usar el archivo de ejemplo: server { listen 80; server_name nombre.del.servidor; index index.html;

location / { root /usr/share/nginx/html; }	location ~ /.well-known { allow all; } }

El achivo de configuración se encuentra generalmente en /etc/nginx/sites-enabled/. En este caso, el archivo de configuración se llama www.example.com.

vim /etc/nginx/sites-enabled/www.example.com

O bien:

sudo nano /etc/nginx/sites-enabled/www.example.com

El bloque de líneas del location se coloca solamente en el archivo de configuración del puerto 80.

Luego, debes copiar la ruta en que se encuentra el certificado. Abre el archivo de configuración del puerto 443, que en este caso se llama secure-www.example.com.

cd /etc/nginx/sites-enabled sudo nano secure-www.example.com

Y modifica las siguientes líneas para agregar la ruta en que se encuentra el certificado y la llave privada:

ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;

Una vez hecho esto, puedes borrar las líneas del location que habias agregado primeramente en el archivo de configuración del puerto 80, y reiniciar el servicio nginx.

sudo service nginx restart

OBS.: Estas configuraciones están orientadas a una instalación fresca del webserver Nginx. Si ya cuenta con una configuración que desea utilizar con este certificado SSL, solo debe agregar las ultimas dos líneas mencionadas al archivo de configuraciones correspondiente y reiniciar el servicio.

Renovación
Una vez que el certificado fue configurado correctamente la renovación de éste deberá realizarse cada 90 días, para ello solo es necesario ejecutar el comando:

./certbot-auto renew --standalone

El comando utilizará el archivo de configuración correspondiente al dominio que está ubicado en /etc/letsencrypt/renewal/ y se deberá controlar que en este archivo esten correctamente configurados los parámetros del nginx o apache en caso de surgir un error durante la renovación.

Este mismo comando debe ser configurado en el cron para ser ejecutado todos los días, los certificados solo serán renovados cuando llegue la fecha límite de renovación. Debe ser ejecutado todos los días en caso de que letsencrypt realice una revocación inesperada del certificado.

Automatizar renovación
Para facilitar la renovación de los certificados, creamos un script y configuramos el cron para ejecutar el mismo cada fin de semana. Aquí, asumimos que el Let's Encrypt está instalado en /opt/letsencrypt/ y se accede al servidor como root.

Script:

Crearemos el script en el siguiente directorio y le daremos permisos de ejecución: $ mkdir -p /srv/scripts && cd /srv/scripts $ touch letsencrypt-renew.sh $ chmod +x letsencrypt-renew.sh De acuerdo al webserver utilizado, el script debe contener:


 * Apache:
 * 1) !/bin/bash

service apache2 stop

/opt/letsencrypt/certbot-auto renew

service apache2 start


 * Nginx:
 * 1) !/bin/bash

service nginx stop

/opt/letsencrypt/certbot-auto renew --standalone

service nginx start

Configuración en Cron

Para que el script se ejecute periódicamente, debemos agregar el script al crontab:

nano /etc/crontab

Agregar la siguiente linea al final del archivo: 0 1    1 * 6,7   root    /srv/scripts/letsencrypt-renew.sh

Resources

 * https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-14-04?utm_medium=social&utm_source=facebook&utm_campaign=letsencrypt_nginx_ubuntu_tut&utm_content=image