Comparte en Facebook Twitter Google+

Hace algunos años, asegurar un sitio web con un certificado SSL era prácticamente solo para quienes tenían transacciones monetarias o manejaban información importante de los usuarios, pero hoy en día es casi un requisito obligatorio para cualquier sitio, sin importar cuál sea su utilidad. En este post estaremos hablando sobre cómo asegurar un sitio web de nginx por medio de Let’s Encrypt en Ubuntu 16.04.

Let’s Encrypt es una autoridad de certificación que se puso en marcha en abril del 2016 y proporciona certificados gratuitos para el cifrado de seguridad de nivel de transporte (TLS) a través de un proceso sencillo de creación, instalación y renovación de certificados de sitios web seguros.

Prerrequisitos

Para poder seguir con este tutorial deberás tener lo siguiente:

  • Servidor Ubuntu 16.04 con su respectiva configuración inicial.
  • Un nombre de dominio registrado. En este tutorial utilizaremos el dominio ejemplo.com, sin embargo, puedes comprar un nombre de dominio en Namecheap o usar el de tu elección.
  • Tener dos registros DNS apuntando a tu servidor (la manera en que se configura el DNS puede variar dependiendo del registrador de dominios que elijas):
    • Un registro de tipo A con el nombre ejemplo.com apuntando a la IP pública de tu servidor.
    • Un registro de tipo A con el nombre www.ejemplo.com apuntando a la IP pública de tu servidor.
  • Tener nginx instalado.

Paso 1 – Instalación de Certbot

El primer paso para utilizar Let’s Encrypt y obtener certificados SSL es instalar el software Certbot en tu servidor.

Certbot está actualmente en desarrollo y los paquetes que proporciona Ubuntu para su instalación suelen estar desactualizados. Sin embargo, los desarrolladores de Certbot mantienen un repositorio de Ubuntu con las versiones más recientes de este software, así que vamos a usar este repositorio en su lugar.

Primero debemos añadir el repositorio:

Luego debemos presionar ENTER para aceptar y posteriormente debemos actualizar los paquetes para poder hacer uso del nuevo repositorio:

Y finalmente instalaremos la versión de Certbot para nginx con apt-get:

Después de haber seguido estos pasos podremos hacer uso de Certbot, pero para poder configurar SSL en nginx, debemos realizar primero algunas verificaciones en nginx.

Paso 2 – Configurar nginx

Ahora es posible que Certbot pueda configurar SSL para nginx de manera automática, sin embargo necesita poder encontrar primero el bloque server antes de poder hacerlo. nginx hace esto buscando la directiva server_name, la cuál debe coincidir con el dominio al que estamos solicitando el certificado.

Si estás en una instalación limpia de nginx puedes modificar el archivo de configuración default de nginx. Abre el archivo con nano o tu editor favorito:

Busca la línea que inicie con la directiva server_name y cambia el _ por tu nombre de dominio:

Guarda los cambios y cierra el editor y después verifica la configuración de nginx con el siguiente comando:

Si recibes algún error vuelve a modificar tu archivo de configuración y corrige los errores que puedas tener.

Una vez que no te muestre errores reinicia la configuración de nginx:

Con esto Certbot podrá encontrar el bloque server adecuado para poder actualizarlo. Después vamos a actualizar la configuración del firewall para permitir el tráfico HTTPS.

Paso 3 – Permitir el paso de HTTPS a través del Firewall

Si tienes ufw habilitado como lo recomendamos en la configuración inicial de Ubuntu 16.04, deberás ajustar las configuraciones para permitir el tráfico HTTPS. Afortunadamente, nginx registra algunos perfiles al momento de hacer su instalación.

Para verificar el estado actual ejecuta el siguiente comando en la terminal:

Deberás ver algo como lo siguiente:

Para permitir el tráfico HTTPS deberás habilitar el perfil Nginx Full y deshabilitar el perfil Nginx HTTP para no tener redundancia en las reglas del firewall:

Revisa ahora el estatus del firewall:

Deberás ver algo como esto:

Ahora todo está preparado y listo para que Certbot pueda obtener nuestros certificados.

Paso 4 – Obtener un certificado SSL

Certbot proporciona una variedad de formas en las que podemos obtener certificados SSL, a través de diferentes plugins. El plugin de nginx se encargará de reconfigurar nginx y reiniciar la configuración cuando sea necesario:

Esto va a ejecutar Certbot con el plugin de nginx. El parámetro -d nos sirve para indicar los nombres para los cuales queremos que sea válido el certificado.

Si es la primera vez que ejecutamos Certbot, se nos va a pedir que indiquemos una dirección de correo electrónico para aceptar los términos de servicio. Después de aceptarlos, Certbot se va a comunicar con el servidor de Let’s Encrypt, luego hará una verificación para confirmar que efectivamente controlamos el dominio al que estamos solicitando el certificado.

Si todo es correcto, Certbot nos va a preguntar cómo queremos establecer las configuraciones HTTPS.

Selecciona la opcion que necesites y presiona ENTER. La configuración se actualizará automáticamente y nginx se reiniciará para aplicar las nuevas configuraciones. Certbot mostrará después un mensaje indicando que el proceso ha concluido exitosamente y te dirá dónde se encuentran los certificados.

Los certificados ahora han sido descargados, instalados y aplicados. Si ahora refrescamos la página web en el navegador podrás ver el indicador de seguridad. Esto indicará que nuestro sitio ha sido asegurado correctamente, usualmente con el logotipo de un candado en color verde a un lado de la URL.

Por último, vamos a revisar el proceso de renovación.

Paso 5 – Verificar la auto-renovación de Certbot

Los certificados de Let’s Encrypt son válidos solamente por 90 días. Esto lo manejan así para alentar a los usuarios de este servicio a automatizar el proceso de renovación de certificados. El paquete de Certbot que instalamos, toma cartas en el asunto por nosotros ejecutando el comando certbot renew dos veces al día en una tarea programada. Esto renovará los certificados con 30 días de anticipación antes de vencer el certificado.

Para probar el proceso de renovación, puedes ejecutar un dry run con Certbot:

Si no ves ningún error, todo se encuentra bien. Si el proceso llegara a fallar, Certbot va a enviar un correo a la dirección especificada al momento de empezar a utilizar Certbot, indicando que uno de tus certificados está a punto de expirar.

Recuerda que puedes seguirnos en Twitter y suscribirte a nuestro boletín:

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

Aprende desarrollo web con Laravel, Vue.js y mucho más a partir de 9 USD al mes: ver planes.