Actualización: uso de certificados SSL/TLS gratuitos de Let’s Encrypt con NGINX

NGINX | 28 de enero de 2021

Nota del editor: La entrada del blog que detalla el procedimiento original para usar Let’s Encrypt con NGINX (de febrero de 2016) redirige aquí. Las instrucciones de esa entrada están obsoletas.

Esta publicación se ha actualizado para dejar de depender de certbot‑auto, que la Electronic Frontier Foundation (EFF) dejó de admitir en Certbot 1.10.0 para Debian y Ubuntu, y en Certbot 1.11.0 para el resto de sistemas operativos. Para obtener más información y consultar métodos de instalación alternativos, consulte esta publicación de la EFF.

Consulte también nuestra entrada de blog de nginx.conf 2015, en la que Peter Eckersley y Yan Zhu, de la Electronic Frontier Foundation, presentan la autoridad de certificación Let’s Encrypt, que acababa de crearse.

Es bien sabido que el cifrado SSL/TLS de un sitio web permite obtener un mejor posicionamiento en los buscadores y ofrece mayor seguridad a los usuarios. Sin embargo, existen diversos obstáculos que han impedido a los propietarios de sitios web adoptar SSL.

Dos de los mayores obstáculos han sido el coste y los procesos manuales necesarios para obtener un certificado. Pero ahora, con Let’s Encrypt, ya no son motivo de preocupación. Let’s Encrypt pone el cifrado SSL/TLS a disposición de todo el mundo de forma gratuita.

Let’s Encrypt es una autoridad de certificación (CA) gratuita, automatizada y abierta. Sí, así es: certificados SSL/TLS gratuitos. Actualmente, la mayoría de los navegadores confían en los certificados emitidos por Let’s Encrypt, incluidos navegadores antiguos como Internet Explorer en Windows XP SP3. Además, Let’s Encrypt automatiza por completo tanto la emisión como la renovación de certificados.

En esta entrada del blog, explicamos cómo utilizar el cliente de Let’s Encrypt para generar certificados y cómo configurar automáticamente NGINX Open Source y NGINX Plus para que los utilicen.

Cómo funciona Let’s Encrypt

Antes de emitir un certificado, Let’s Encrypt valida la titularidad de tu dominio. El cliente de Let’s Encrypt, que se ejecuta en tu host, crea un archivo temporal (un token) con la información necesaria. A continuación, el servidor de validación de Let’s Encrypt realiza una solicitud HTTP para recuperar el archivo y valida el token, lo que permite comprobar que el registro DNS de tu dominio apunta al servidor en el que se ejecuta el cliente de Let’s Encrypt.

Requisitos previos

Antes de empezar a usar Let’s Encrypt, debes:

  • Tener NGINX o NGINX Plus instalado.
  • Sea propietario o tenga el control del nombre de dominio registrado para el certificado. Si no dispone de un nombre de dominio registrado, puede recurrir a un registrador de nombres de dominio, como GoDaddy o dnsexit.
  • Cree un registro DNS que asocie su nombre de dominio con la dirección IP pública de su servidor.

Ahora puede configurar fácilmente Let’s Encrypt con NGINX Open Source o NGINX Plus (para facilitar la lectura, a partir de ahora nos referiremos simplemente a NGINX).

Nota: Hemos probado el procedimiento descrito en esta entrada de blog en Ubuntu 16.04 (Xenial).

1. Descarga el cliente de Let’s Encrypt

Primero, descarga el cliente de Let’s Encrypt, «certbot».

Como se ha mencionado anteriormente, hemos probado las instrucciones en Ubuntu 16.04, y estos son los comandos adecuados para esa plataforma:

$ apt-get update$ sudo apt-get install certbot
$ apt-get install python-certbot-nginx

Con Ubuntu 18.04 y versiones posteriores, utilice en su lugar la versión de Python 3:

$ apt-get update$ sudo apt-get install certbot
$ apt-get install python3-certbot-nginx

2. Configurar NGINX

certbot puede configurar automáticamente NGINX para SSL/TLS. Busca y modifica el bloque server de la configuración de NGINX que contiene una directiva server_name con el nombre de dominio para el que solicita un certificado. En nuestro ejemplo, el dominio es www.example.com.

  1. Suponiendo que partes de una instalación nueva de NGINX, utiliza un editor de texto para crear un archivo en el directorio /etc/nginx/conf.d con el nombre nombre‑de‑dominio.conf (en nuestro ejemplo, www.example.com.conf).
  2. Especifique su nombre de dominio (y sus variantes, si las hubiera) con la directiva server_name:
server {    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name example.com www.example.com;
}
  1. Guarda el archivo y, a continuación, ejecuta este comando para comprobar la sintaxis de la configuración y reiniciar NGINX:
$ nginx -t && nginx -s reload

3. Obtén el certificado SSL/TLS

El complemento de NGINX para certbot se encarga de reconfigurar NGINX y volver a cargar su configuración cuando sea necesario.

  1. Ejecute el siguiente comando para generar certificados con el complemento de NGINX:
$ sudo certbot --nginx -d example.com -d www.example.com
  1. Responde a las indicaciones de certbot para configurar los ajustes de HTTPS. Para ello, deberás introducir tu dirección de correo electrónico y aceptar los términos del servicio de Let’s Encrypt.

Cuando finaliza la generación del certificado, NGINX se recarga con la nueva configuración. certbot genera un mensaje que indica que el certificado se ha generado correctamente y especifica su ubicación en el servidor.

Congratulations! You have successfully enabled https://example.com and https://www.example.com 
-------------------------------------------------------------------------------------
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 2017-12-12.

Nota: Los certificados de Let’s Encrypt caducan al cabo de 90 días (el 2017-12-12 en el ejemplo). Para obtener información sobre cómo renovar automáticamente los certificados, consulte Renovación automática de los certificados de Let’s Encrypt más abajo.

Si consulta nombre‑de‑dominio.conf, verá que certbot lo ha modificado:

server {    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name  example.com www.example.com;

    listen 443 ssl; # managed by Certbot

    # RSA certificate
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot

    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

    # Redirect non-https traffic to https
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    } # managed by Certbot
}

4. Renovar automáticamente los certificados de Let’s Encrypt

Los certificados de Let’s Encrypt caducan al cabo de 90 días. Le recomendamos que renueve sus certificados automáticamente. Para ello, añadiremos una tarea de cron a un archivo crontab existente.

  1. Abre el archivo crontab.
$ crontab -e
  1. Añada el comando certbot para que se ejecute a diario. En este ejemplo, ejecutamos el comando todos los días al mediodía. El comando comprueba si el certificado del servidor caducará en los próximos 30 días y, de ser así, lo renueva. La directiva --quiet indica a certbot que no genere ninguna salida.
0 12 * * * /usr/bin/certbot renew --quiet
  1. Guarde y cierre el archivo. Todos los certificados instalados se renovarán y volverán a cargarse automáticamente.

Resumen

Hemos instalado el agente de Let’s Encrypt para generar certificados SSL/TLS para un nombre de dominio registrado. Hemos configurado NGINX para que utilice los certificados y hemos habilitado su renovación automática. Con los certificados de Let’s Encrypt para NGINX y NGINX Plus, puede tener un sitio web sencillo y seguro en funcionamiento en cuestión de minutos.

Para probar Let’s Encrypt con NGINX Plus, inicie su prueba gratuita de 30 días hoy mismo o póngase en contacto con nosotros para hablar sobre sus casos de uso.

Documentación relacionada

Protección del tráfico HTTP hacia servidores ascendentes
Protección del tráfico TCP hacia servidores ascendentes
Terminación SSL de NGINX


Compartir

Sobre el autor

Artículos relacionados del blog

Únete a F5 NGINX en AppWorld 2024
NGINX | 04/01/2024

Únete a F5 NGINX en AppWorld 2024

Descubre las numerosas razones para asistir al evento insignia de F5, que incluirá un emocionante anuncio sobre la cartera de productos NGINX.

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source
NGINX | 26/09/2023

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source

La función de diccionario compartido permite configurar NGINX sin necesidad de reiniciarlo al renovar los certificados SSL/TLS.

Exposición de APIs en Kubernetes
NGINX | 10/03/2022

Exposición de APIs en Kubernetes

La unidad 2 de Microservices March 2022 se centra en cómo exponer tus API en Kubernetes. Aquí tienes enlaces a los recursos que necesitas: la retransmisión en directo del 14 de marzo, artículos de blog y otros recursos de preparación, y el laboratorio práctico «Protege las API de Kubernetes mediante la limitación de solicitudes».

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto
NGINX | 23/08/2021

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto

Hoy, en NGINX Sprint 2.0, anunciamos cómo respaldaremos nuestra visión del futuro de las aplicaciones modernas con una mayor presencia en la comunidad de código abierto, incluida la participación en el proyecto comunitario Kubernetes, nuevos proyectos de software de código abierto y la arquitectura de referencia para aplicaciones modernas.

Presentamos NGINX Plus R22
NGINX | 09/06/2020

Presentamos NGINX Plus R22

NGINX Plus R22 incorpora nuevas funcionalidades, como la compatibilidad con OCSP para verificar la revocación de certificados en TLS mutuo, el uso de varios proveedores de identidad OIDC en una configuración, el seguimiento en tiempo real de la limitación de solicitudes y conexiones en el panel de NGINX Plus y mejoras en NGINX JavaScript.

Presentamos NGINX Plus R17
NGINX | 11/12/2018

Presentamos NGINX Plus R17

NGINX Plus R17 incorpora compatibilidad con la limitación de velocidad en dos fases y con TLS 1.3, la versión más reciente del protocolo Transport Layer Security. La configuración de OpenID Connect es más sencilla y NGINX ModSecurity WAF es el doble de rápido que antes. También se ha actualizado el módulo JavaScript de NGINX.