Instalar Let’s Encrypt en Nginx con Ubuntu 18.04

Instalar Let’s Encrypt en Nginx con Ubuntu 18.04.

Let’s Encrypt es una entidad emisora ​​de certificados gratuitos ademas de open source (Github). El certificado fue desarrollado por la Internet Security Research Group (ISRG).

La inmensa mayoría de navegadores web, confían en los certificados emitidos por Let’s Encrypt.

En este articulo veremos paso a paso cómo asegurar / instalar Let’s Encrypt en Nginx con Ubuntu 18.04. Para conseguir una integración perfecta utilizaremos la herramienta «Cerbot«.

Comenzamos.

Instalar Let's Encrypt en Nginx con Ubuntu 18.04 1

 

Instalar Let’s Encrypt en Nginx con Ubuntu 18.04

Instalar Cerbot

Lo primero que debemos hacer es instalar Certbot, que es una herramienta muy completa y fácil de usar.

Con Certbot podemos automatizar las tareas de obtener y renovar los certificados SSL Let’s Encrypt, ademas de configurar los servidores web para su uso. La herramienta Certbot está incluida en los repositorios oficiales de Ubuntu 18.04.

Actualizamos el sistema e instalamos Cerbot.

sudo apt update

sudo apt install certbot

Una vez instalado, generamos un conjunto de parámetros DH  (Diffie–Hellman key exchange) de 2048 bits para fortalecer la seguridad:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Instalar Let's Encrypt en Nginx con Ubuntu 18.04 2

 

Para obtener el certificado SSL de nuestro dominio, vamos a utilizar el plugin Webroot, la función del plugin es crear un archivo temporal para validar el dominio solicitado, en:${webroot-path}/.well-known/acme-challenge.

El servidor Let’s Encrypt hará las solicitudes HTTP directamente en el archivo temporal, de esta forma se podrá confirmar que el dominio solicitado resuelve en el servidor que ejecuta Certbot.

Para que no haya equívocos, asignamos todas las solicitudes http.well-known/acme-challenge a un solo directorio, /var/lib/letsencrypt.

mkdir -p /var/lib/letsencrypt/.well-known

chgrp www-data /var/lib/letsencrypt

chmod g+s /var/lib/letsencrypt

 

Para evitar duplicación de código creamos dos archivos.

sudo nano /etc/nginx/snippets/letsencrypt.conf

Copia y pega lo siguiente:
location ^~ /.well-known/acme-challenge/ {
  allow all;
  root /var/lib/letsencrypt/;
  default_type "text/plain";
  try_files $uri =404;
}

Guarda el archivo y cierra el editor.

Creamos el segundo archivo.

sudo nano /etc/nginx/snippets/ssl.conf

Copia y pega lo siguiente:
ssl_dhparam /etc/ssl/certs/dhparam.pem;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 30s;

add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;

Guarda el archivo y cierra el editor.

Lo agregamos a nuestro dominio.

sudo nano /etc/nginx/sites-available/tudominio.com

server {
  listen 80;
  server_name tudominio.com www.tudominio.com;

  include snippets/letsencrypt.conf;
}

Guarda y cierra el editor, porque ahora debemos crear un enlace simbólico para que al iniciar «Nginx» lo pueda leer.
sudo ln -s /etc/nginx/sites-available/tudominio.com /etc/nginx/sites-enabled/

Reiniciamos Nginx.
sudo systemctl restart nginx

Instalar Let's Encrypt en Nginx con Ubuntu 18.04 3

 

Ejecutamos Certbot con el plugin webroot para obtener los archivos del certificado SSL (introduce tus datos).

sudo certbot certonly --agree-tos --email tumail@mail.com --webroot -w /var/lib/letsencrypt/ -d tudominio.com -d www.tudominio.com

ejemplo de respuesta valida…

IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2018-07-28. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
«certbot renew»
– Your account credentials have been saved in your Certbot
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 Certbot so
making regular backups of this folder is ideal.
– If you like Certbot, please consider supporting our work by:

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

 

Ya tenemos los archivos del certificado, solo nos falta agregarlos al dominio.

sudo nano /etc/nginx/sites-available/tudominio.com

Edita el archivo (con tus datos), como te indico en el siguiente código:
server {
    listen 80;
    server_name www.tudominio.com tudominio.com;

    include snippets/letsencrypt.conf;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.tudominio.com;

    ssl_certificate /etc/letsencrypt/live/tudominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/tudominio.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/tudominio.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    return 301 https://tudominio.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name tudominio.com;

    ssl_certificate /etc/letsencrypt/live/tudominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/tudominio.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/tudominio.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    # . . . el resto del archivo déjalo como está.
}

Guarda el archivo y cierra el editor.

Recargamos «Nginx«.

sudo systemctl reload nginx

 

Renovar automáticamente Let’s Encrypt

Los certificados Let’s Encrypt tienen una validez de 90 días. Para renovar automáticamente los certificados antes de que caduquen, usando la herramienta Certbot creamos una tarea cron para que se ejecute dos veces al día, así, siempre mantendremos el o los certificados renovados.

sudo nano /etc/cron.d/certbot

Copia y pega:
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"

Podemos comprobar si renueva ejecutando lo siguiente:
sudo certbot renew --dry-run

Si no lanza ningún error, el proceso fue exitoso.

 

Felicidades!!! ya tienes instalado Let’s Encrypt en Nginx con Ubuntu 18.04.

Comparte el articulo «Instalar Let’s Encrypt en Nginx con Ubuntu 18.04«.

 

2 Comentarios

  1. Ivan
    23/10/2019
    • sololinux
      23/10/2019

Agregar comentario