Añadir un certificado SSL con Let’s Encrypt

¿Qué es Let’s Encrypt?

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 HTTPS encriptado en servidores web. Simplifica el proceso al proporcionar un cliente de software, Certbot, que intenta automatizar la mayoría (si no todos) de los pasos requeridos. Actualmente, todo el proceso de obtención e instalación de un certificado está totalmente automatizado tanto en Apache como en Nginx.

Tiene el apoyo de grande empresa como Google, Facebook o Cisco entre otros.

En este tutorial, utilizará Certbot para obtener un certificado SSL gratuito para Apache en Debian 9 y configurará su certificado para que se renueve automáticamente.

Este tutorial utilizará un archivo de host virtual Apache separado en lugar del archivo de configuración predeterminado. Recomendamos crear nuevos archivos de host virtual Apache para cada dominio porque ayuda a evitar errores comunes y mantiene los archivos predeterminados como una configuración alternativa.

Requisitos previos

Para seguir este tutorial, necesitará:

  • Un servidor Debian 9 configurado siguiendo esta configuración inicial del servidor para el tutorial Debian 9,
  • Un usuario no root con privilegios de administrador y un firewall.
  • Un nombre de dominio.

Este tutorial utilizará example.com en todo momento. Puede comprar un nombre de dominio en Namecheap, obtener uno gratis en Freenom o usar el registrador de dominio que prefiera. Ambos de los siguientes registros DNS configurados para su servidor. Puede seguir esta introducción a DigitalOcean DNS para obtener detalles sobre cómo agregarlos. Un registro A con example.com apuntando a la dirección IP pública de su servidor. Un registro A con www.example.com apuntando a la dirección IP pública de su servidor. Apache se instaló siguiendo Cómo instalar Apache en Debian 9. Asegúrese de tener un archivo de host virtual para su dominio. Este tutorial utilizará /etc/apache2/sites-available/example.com.conf como ejemplo.

1. Instalar Certbot

El primer paso para usar Let’s Encrypt para obtener un certificado SSL es instalar el software Certbot en su servidor. En la propia web de Let’s Encrypt se indica que necesitaremos disponer en nuestro servidor de un cliente ACME para la generación del certificado y se recomiendo concretamente Certbot como cliente ACME. Éste puede automatizar la emisión e instalación de certificados con cero tiempo de inactivdad. También tiene modos de expertos para personas que no quieren autoconfiguración. Es fácil de usar, funciona en muchos sistemas operativos, y tiene documentación genial.

Si Certbot no cumple con tus necesidades, o quisieras tratar otra cosa, hay muchos otros clientes ACME para escoger. Una vez hayas escogido un cliente ACME, ve la documentación para ese cliente para proceder.

Al momento de escribir este artículo, Certbot no está disponible en los repositorios de software de Debian por defecto. Para descargar el software usando apt, necesitará agregar el repositorio de backports a su sources.listarchivo donde aptbusca las fuentes del paquete. Los backports son paquetes de pruebas de Debian y distribuciones inestables que se vuelven a compilar para que se ejecuten sin nuevas bibliotecas en distribuciones estables de Debian.

Para agregar el repositorio de backports, abra (o cree) el sources.listarchivo en su /etc/apt/directorio:

sudo nano /etc/apt/sources.list

Al final del archivo, agregue la siguiente línea:

. . .
deb http://ftp.debian.org/debian stretch-backports main

Esto incluye los mainpaquetes, que cumplen con las Directrices de software libre de Debian (DFSG) , así como los componentes non-freecontrib, que no cumplen con DFSG o incluyen dependencias en esta categoría.

Guardar y cerrar el archivo presionando CTRL+XYy, a continuación ENTER, a continuación, actualizar sus listas de paquetes:

sudo apt update

Luego instale Certbot con el siguiente comando. Tenga en cuenta que la -topción le dice aptque busque el paquete buscando en el repositorio de backports que acaba de agregar:

sudo apt install python-certbot-apache -t stretch-backports

Certbot ya está listo para usar, pero para que pueda configurar SSL para Apache, debemos verificar que Apache se haya configurado correctamente.

2. Configuración del certificado SSL

Certbot necesita poder encontrar el host virtual correcto en su configuración de Apache para que pueda configurar SSL automáticamente. Específicamente, lo hace buscando una ServerNamedirectiva que coincida con el dominio para el que solicita un certificado.

Si siguió el paso de configuración del host virtual en el tutorial de instalación de Apache , debería tener un VirtualHostbloque para su dominio en /etc/apache2/sites-available/example.conf con la directiva ServerName ya configurada adecuadamente.

Para verificar, abra el archivo de host virtual para su dominio usando nanoo su editor de texto favorito:

sudo nano /etc/apache2/sites-available/example.conf

Encuentra la línea de la directiva ServerName . Debería verse así, con su propio nombre de dominio en lugar de example.com:

...
ServerName example.com;
...

Si aún no lo hace, actualice la ServerNamedirectiva para que apunte a su nombre de dominio. Luego guarde el archivo, salga de su editor y verifique la sintaxis de sus ediciones de configuración:

sudo apache2ctl configtest

Si no hay errores de sintaxis, verá este resultado:

Syntax OK

Si obtiene un error, vuelva a abrir el archivo de host virtual y verifique si hay errores tipográficos o faltan caracteres. Una vez que la sintaxis del archivo de configuración es correcta, vuelva a cargar Apache para cargar la nueva configuración:

sudo systemctl reload apache2

Certbot ahora puede encontrar el bloque VirtualHost correcto y actualizarlo.

A continuación, actualice el firewall para permitir el tráfico HTTPS.

3. Permitir HTTPS a través del firewall

Si tiene ufw habilitado el firewall, según lo recomendado por las guías de requisitos previos, deberá ajustar la configuración para permitir el tráfico HTTPS. Afortunadamente, cuando se instala en Debian, ufw viene con algunos perfiles que ayudan a simplificar el proceso de cambiar las reglas del firewall para el tráfico HTTP y HTTPS.

Puede ver la configuración actual escribiendo:

sudo ufw status

Si siguió el Paso 2 de nuestra guía sobre Cómo instalar Apache en Debian 9 , el resultado de este comando se verá así, mostrando que solo se permite el tráfico HTTP al servidor web:

Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
WWW                        ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
WWW (v6)                   ALLOW       Anywhere (v6)

Para permitir adicionalmente el tráfico HTTPS, permita el perfil «WWW completo» y elimine la asignación de perfil redundante «WWW»:

sudo ufw allow 'WWW Full'
sudo ufw delete allow 'WWW'

Su estado ahora debería verse así:

sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
WWW Full                   ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
WWW Full (v6)              ALLOW       Anywhere (v6)    

A continuación, ejecutemos Certbot y busquemos nuestros certificados.

4. Obtención de un certificado SSL

Certbot proporciona una variedad de formas de obtener certificados SSL a través de complementos. El complemento Apache se encargará de reconfigurar Apache y volver a cargar la configuración siempre que sea necesario. Para usar este complemento, escriba lo siguiente:

sudo certbot --apache -d example.com -d www.example.com

Esto se ejecuta certbotcon el --apachecomplemento y se usa -dpara especificar los nombres para los que desea que el certificado sea válido.

Si es la primera vez que se ejecuta certbot, se le pedirá que ingrese una dirección de correo electrónico y acepte los términos del servicio. Después de hacerlo, certbotse comunicará con el servidor Let’s Encrypt, luego ejecutará un desafío para verificar que controle el dominio para el que solicita un certificado.

Si tiene éxito, certbot le preguntará cómo desea configurar sus ajustes HTTPS:

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):

Seleccione su elección y luego presione ENTER. La configuración se actualizará y Apache se volverá a cargar para elegir la nueva configuración. certbotfinalizará con un mensaje que le indicará que el proceso fue exitoso y dónde se almacenan sus certificados:

Output
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-12-04. 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

Sus certificados se descargan, instalan y cargan. Intente recargar su sitio web utilizando https://y observe el indicador de seguridad de su navegador. Debe indicar que el sitio está asegurado correctamente, generalmente con un ícono de candado verde. Si prueba su servidor utilizando la Prueba del servidor SSL Labs , obtendrá una calificación A.

Terminemos probando el proceso de renovación.

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 alentar a los usuarios a automatizar su proceso de renovación de certificados. El certbotpaquete que instalamos se encarga de esto al agregar un script de renovación a /etc/cron.d. Este script se ejecuta dos veces al día y renovará automáticamente cualquier certificado dentro de los treinta días posteriores a su vencimiento.

Para probar el proceso de renovación, puede hacer una ejecución en seco con certbot:

sudo certbot renew --dry-run

Si no ve errores, ya está todo listo. Cuando sea necesario, Certbot renovará sus certificados y volverá a cargar Apache 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 especificó, advirtiéndole cuando su certificado esté por vencer.

Conclusión

En este tutorial, instaló el cliente Let’s Encrypt certbot, descargó certificados SSL para su dominio, configuró Apache para usar estos certificados y configuró 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.