Introducción
Let’s Encrypt es una Autoridad de Certificación (CA) que proporciona una forma fácil de obtener e instalar certificados TLS/SSL gratuitos, lo que permite habilitar HTTPS cifrado en servidores web. Simplifica el proceso al proporcionar un cliente de software, Certbot, que intenta automatizar la mayoría (si no todas) de las etapas requeridas. Actualmente, todo el proceso de obtención e instalación de un certificado está completamente automatizado tanto en Apache como en Nginx.
En este tutorial, utilizarás Certbot para obtener un certificado SSL gratuito para Nginx en Ubuntu 20.04 y configurarás tu certificado para renovarse automáticamente.
Este tutorial utilizará un archivo de configuración de servidor Nginx separado en lugar del archivo predeterminado. Recomendamos crear nuevos archivos de bloque de servidor Nginx para cada dominio porque ayuda a evitar errores comunes y mantiene los archivos predeterminados como una configuración de respaldo.
Deja que DigitalOcean se preocupe por administrar Nginx y Let’s Encrypt. La Plataforma de Aplicaciones de DigitalOcean te permitirá implementar directamente desde GitHub en minutos. La Plataforma de Aplicaciones también manejará certificados SSL y enrutamiento para ti.
Prerrequisitos
Para seguir este tutorial, necesitarás:
-
Un servidor Ubuntu 20.04 configurado siguiendo este tutorial de configuración inicial del servidor para Ubuntu 20.04, incluyendo un usuario no root habilitado para sudo y un firewall.
-
Un nombre de dominio registrado. Este tutorial utilizará
example.com
en todo momento. Puedes comprar un nombre de dominio en Namecheap, obtener uno gratis con Freenom, o utilizar el registrador de dominios de tu elección. -
Ambos de los siguientes registros DNS configurados para tu servidor. Si estás utilizando DigitalOcean, por favor consulta nuestra documentación DNS para obtener detalles sobre cómo añadirlos.
- Un registro A con
example.com
apuntando a la dirección IP pública de tu servidor. - Un registro A con
www.example.com
apuntando a la dirección IP pública de tu servidor.
- Un registro A con
-
Nginx instalado siguiendo Cómo Instalar Nginx en Ubuntu 20.04. Asegúrate de tener un bloque de servidor para tu dominio. Este tutorial usará
/etc/nginx/sites-available/ejemplo.com
como ejemplo.
Paso 1 — Instalando Certbot
El primer paso para usar Let’s Encrypt para obtener un certificado SSL es instalar el software Certbot en tu servidor.
Instala Certbot y su plugin Nginx con apt
:
Certbot está ahora listo para usar, pero para que configure automáticamente SSL para Nginx, necesitamos verificar parte de la configuración de Nginx.
Paso 2 — Confirmar la Configuración de Nginx
Certbot necesita poder encontrar el bloque server
correcto en tu configuración de Nginx para poder configurar automáticamente SSL. Específicamente, hace esto buscando una directiva server_name
que coincida con el dominio para el que solicitas un certificado.
Si seguiste el paso de configuración de bloque de servidor en el tutorial de instalación de Nginx, deberías tener un bloque de servidor para tu dominio en /etc/nginx/sites-available/ejemplo.com
con la directiva server_name
ya configurada correctamente.
Para verificar, abre el archivo de configuración para tu dominio usando nano
o tu editor de texto favorito:
Encuentra la línea existente server_name
. Debería verse así:
Si es así, cierra tu editor y pasa al siguiente paso.
Si no lo hace, actualícelo para que coincida. Luego guarde el archivo, salga de su editor y verifique la sintaxis de las ediciones de su configuración:
Si obtiene un error, vuelva a abrir el archivo de bloque de servidor y verifique si hay algún error tipográfico o caracteres faltantes. Una vez que la sintaxis del archivo de configuración sea correcta, recargue Nginx para cargar la nueva configuración:
Certbot ahora puede encontrar el bloque de server
correcto y actualizarlo automáticamente.
A continuación, actualicemos el firewall para permitir el tráfico HTTPS.
Paso 3 — Permitir HTTPS a través del Firewall
Si tiene el firewall ufw
habilitado, como se recomienda en las guías previas, deberá ajustar la configuración para permitir el tráfico HTTPS. Afortunadamente, Nginx registra algunos perfiles con ufw
al momento de la instalación.
Puede ver la configuración actual escribiendo:
Probablemente se verá así, lo que significa que solo se permite el tráfico HTTP al servidor web:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Para permitir adicionalmente el tráfico HTTPS, permita el perfil Nginx Full y elimine la redundante permisión del perfil Nginx HTTP:
Su estado debería verse así ahora:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
A continuación, ejecutemos Certbot y obtengamos nuestros certificados.
Paso 4 — Obtención de un Certificado SSL
Certbot ofrece una variedad de formas de obtener certificados SSL a través de complementos. El complemento de Nginx se encargará de reconfigurar Nginx y recargar la configuración cuando sea necesario. Para usar este complemento, escriba lo siguiente:
Esto ejecuta certbot
con el complemento --nginx
, usando -d
para especificar los nombres de dominio para los que desea que el certificado sea válido.
Si es la primera vez que ejecuta certbot
, se le pedirá que ingrese una dirección de correo electrónico y acepte los términos de servicio. Después de hacerlo, certbot
se comunicará con el servidor de Let’s Encrypt, luego ejecutará un desafío para verificar que controla el dominio para el que está solicitando un certificado.
Si eso es exitoso, certbot
le preguntará cómo desea configurar su configuración HTTPS.
OutputPlease choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
Seleccione su opción y presione ENTER
. La configuración se actualizará y Nginx se recargará para recoger los nuevos ajustes. certbot
concluirá con un mensaje que le indicará que el proceso fue exitoso y dónde se almacenan sus certificados:
OutputIMPORTANT 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 2020-08-18. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- 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
Tus certificados están descargados, instalados y cargados. Intenta recargar tu sitio web usando https://
y observa el indicador de seguridad de tu navegador. Debería indicar que el sitio está correctamente asegurado, generalmente con un icono de candado. Si pruebas tu servidor usando el SSL Labs Server Test, obtendrá una calificación A.
Terminemos probando el proceso de renovación.
Paso 5 — Verificación de la Renovación Automática de Certbot
Los certificados de Let’s Encrypt solo son válidos por noventa días. Esto es para incentivar a los usuarios a automatizar su proceso de renovación de certificados. El paquete certbot
que instalamos se encarga de esto por nosotros agregando un temporizador de systemd que se ejecutará dos veces al día y renovará automáticamente cualquier certificado que esté dentro de los treinta días de expiración.
Puedes consultar el estado del temporizador con systemctl
:
Output● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago
Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left
Triggers: ● certbot.service
Para probar el proceso de renovación, puedes hacer una prueba en seco con certbot
:
Si no ves errores, estás listo. Cuando sea necesario, Certbot renovará tus certificados y recargará Nginx para recoger los cambios. Si el proceso de renovación automática falla alguna vez, Let’s Encrypt enviará un mensaje al correo electrónico que especificaste, advirtiéndote cuando tu certificado esté a punto de expirar.
Conclusión
En este tutorial, instalaste el cliente Let’s Encrypt certbot
, descargaste certificados SSL para tu dominio, configuraste Nginx para usar estos certificados y estableciste la renovación automática de certificados. Si tienes más preguntas sobre cómo usar Certbot, la documentación oficial es un buen lugar para empezar.