Introducción
Let’s Encrypt es una Autoridad de Certificación (CA) que proporciona una manera fácil de obtener e instalar certificados TLS/SSL gratuitos, permitiendo así el cifrado de HTTPS en los servidores web. Simplifica el proceso al proporcionar un cliente de software, Certbot, que intenta automatizar la mayoría (si no todos) de los pasos necesarios. 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, utilizaremos Certbot para obtener un certificado SSL gratuito para Nginx en Ubuntu 16.04 y configurar su certificado para que se renueve automáticamente.
Este tutorial usa el archivo de configuración Nginx predeterminado en lugar de un archivo de bloque de servidor separado. Recomendamos crear nuevos archivos de bloque del servidor Nginx para cada dominio, ya que ayuda a evitar algunos errores comunes y mantiene los archivos predeterminados como una configuración de respaldo según lo previsto.
Prerrequisitos
Para seguir este tutorial, necesitarás:
- Se configuró un servidor Ubuntu 16.04 siguiendo una configuración inicial del servidor, que incluye un usuario sudo no root y un firewall.
- Un nombre de dominio totalmente registrado. A lo largo de este tutorial se utilizará example.com. Puedes comprar un nombre de dominio en Namecheap, obtener uno gratis en Freenom o usar el registrador de dominio de tu elección.
- Ambos de los siguientes registros DNS configurados para su servidor. En internet puedes encontrar algún tutorial para obtener detalles sobre cómo agregarlos.
-
- 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.
Paso 1 – Instalar Certbot
El primer paso para usar Let’s Encrypt para obtener un certificado SSL es instalar el software Certbot en tu servidor.
Certbot está en desarrollo muy activo, por lo que los paquetes de Certbot proporcionados por Ubuntu tienden a estar desactualizados. Sin embargo, los desarrolladores de Certbot mantienen un repositorio de software de Ubuntu con versiones actualizadas, por lo que usaremos ese repositorio en su lugar.
Primero, tienes que agregar el repositorio.
1 |
$ sudo add-apt-repository ppa:certbot/certbot |
Tendrás que pulsar ENTER para aceptar. Luego, actualiza la lista de paquetes para obtener la información del paquete del nuevo repositorio.
1 |
$ sudo apt-get update |
Y finalmente, instala el paquete Nginx de Certbot con apt-get.
1 |
$ sudo apt-get install python-certbot-nginx |
Certbot ya está listo para usarse, pero para que configure SSL para Nginx, necesitamos verificar parte de la configuración de Nginx.
Paso 2 – Configurar Nginx
Certbot puede configurar automáticamente SSL para Nginx, pero necesitas poder encontrar el bloque del servidor correcto en su configuración. Para ello, busca una directiva server_name que coincida con el dominio para el que estás solicitando un certificado.
Si estás comenzando con una instalación nueva de Nginx, puedes actualizar el archivo de configuración predeterminado. Ábrelo con nano o con tu editor de texto favorito.
1 |
$ sudo nano /etc/nginx/sites-available/default |
Busca la línea existente en server_name y reemplaza el guión bajo _, con tu nombre de dominio:
1 2 3 4 |
/etc/nginx/sites-available/default . . . server_name example.com www.example.com; . . . |
Debes guardar el archivo y salir del editor.
Luego, verifica la sintaxis de tus ediciones de configuración.
1 |
$ sudo nginx -t |
Si recibes algún error, vuelve a abrir el archivo y verifica si hay errores tipográficos, luego pruébalo nuevamente.
Una vez que la sintaxis de tu configuración sea correcta, vuelve a cargar Nginx para cargar la nueva configuración.
1 |
$ sudo systemctl reload nginx |
Certbot ahora podrá encontrar el bloque del servidor correcto y actualizarlo. A continuación, actualizaremos nuestro firewall para permitir el tráfico HTTPS.
Paso 3 – Permitir HTTPS a través del Firewall
Si tienes el firewall ufw habilitado, tal como lo recomiendan las guías de requisitos previos, deberás ajustar la configuración para permitir el tráfico HTTPS. Afortunadamente, Nginx registra algunos perfiles con la instalación de ufw.
Puedes ver la configuración actual escribiendo:
1 |
$ sudo ufw status |
Probablemente se verá así, lo que significa que solo se permite el tráfico HTTP al servidor web:
1 2 3 4 5 6 7 8 9 |
Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6) |
Además, para permitir el tráfico HTTPS, podemos permitir el perfil completo de Nginx y luego eliminar la asignación redundante del perfil HTTP de Nginx:
1 2 |
$ sudo ufw allow 'Nginx Full' $ sudo ufw delete allow 'Nginx HTTP' |
El estado debería verse así en este momento:
1 |
$ sudo ufw status |
1 2 3 4 5 6 7 8 9 |
Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6) |
Ahora estamos listos para ejecutar Certbot y obtener nuestros certificados.
Paso 4 – Obtención de un certificado SSL
Certbot proporciona una variedad de formas de obtener certificados SSL, a través de varios complementos. El complemento Nginx se encargará de reconfigurar Nginx y volver a cargar la configuración cuando sea necesario:
1 |
$ sudo certbot --nginx -d example.com -d www.example.com |
Esto se ejecuta certbot con el complemento —nginx, y se usa –d para especificar los nombres para los cuales queremos que el certificado sea válido.
Si es la primera vez que se ejecuta certbot, se te solicitará que ingreses una dirección de correo electrónico y aceptes los términos del servicio. Después de hacerlo, certbot se comunicará con el servidor de Let’s Encrypt, luego ejecutará un desafío para verificar que tu controlas el dominio para el que solicitas un certificado.
Si tienes éxito, certbot te preguntará cómo deseas configurar tus ajustes de HTTPS.
1 2 3 4 5 6 7 8 9 |
Output Please 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): |
Selecciona tu elección y luego pulsa ENTER. La configuración se actualizará y Nginx se volverá a cargar para seleccionar la nueva configuración. Certbot finalizará con un mensaje que te informará que el proceso se realizó correctamente y dónde se almacenan tus certificados:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Output IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will expire on 2017-10-23. 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" - 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 |
Tus certificados son descargados, instalados y cargados. Intenta volver a cargar tu sitio web utilizando https:// y observa el indicador de seguridad de tu navegador. Debe indicar que el sitio está bien asegurado, generalmente con un icono de candado verde. Si pruebas tu servidor utilizando la prueba de servidor de Labs SSL , obtendrás una calificación de 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 animar a los usuarios a automatizar su proceso de renovación de certificados. El paquete certbot que instalamos se encarga de esto ejecutando “certbot renew” dos veces al día a través de un temporizador systemd. En distribuciones no sistemáticas, esta funcionalidad es proporcionada por un script colocado en /etc/cron.d. Esta tarea se ejecuta dos veces al día y renovará cualquier certificado que esté dentro de los treinta días de vencimiento.
Para probar el proceso de renovación, puede hacer un ensayo en seco con certbot:
1 |
$ sudo certbot renew --dry-run |
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, Let’s Encrypt enviará un mensaje al correo electrónico que especificaste, advirtiéndote cuando tu certificado está a punto de caducar.
Conclusión
En este tutorial, instalaste el cliente de Let’s Encrypt certbot, descargaste certificados SSL para tu dominio, configuraste Nginx para usar estos certificados y configuraste la renovación automática de certificados. Si tiene más preguntas sobre el uso de Certbot, su documentación es un buen lugar para comenzar.