Introducción
Let’s Encrypt es una Autoridad Certificadora (CA) que facilita la obtención e instalación de certificados TLS/SSL gratuitos, permitiendo así habilitar HTTPS encriptado en servidores web. Simplifica el proceso proporcionando un cliente de software, Certbot, que intenta automatizar la mayoría (si no es que todos) de los pasos requeridos. Actualmente, todo el proceso de obtención e instalación de un certificado está completamente automatizado tanto en Apache como en Nginx.
En esta guía, utilizarás Certbot para obtener un certificado SSL gratuito para Apache en Ubuntu y asegurarte de que este certificado se renueve automáticamente.
Este tutorial utiliza un archivo de host virtual separado en lugar del archivo de configuración predeterminado de Apache para configurar el sitio web que será asegurado por Let’s Encrypt. Recomendamos crear nuevos archivos de host virtual de Apache para cada dominio alojado en un servidor, ya que esto ayuda a evitar errores comunes y mantiene los archivos de configuración predeterminados como configuración de fallback.
Cómo asegurar Apache con Let’s Encrypt en Ubuntu
- Instalación de Certbot
- Verificación de la configuración del host virtual de Apache
- Permitir HTTPS a través del firewall
- Obtención de un certificado SSL
- Verificación del renuevo automático de Certbot
Requisitos previos
Para seguir este tutorial, necesitarás:
-
Un servidor Ubuntu configurado con un usuario no root con privilegios administrativos
sudo
y el firewall habilitado. Puedes configurarlo siguiendo nuestro tutorial de configuración inicial del servidor para Ubuntu. -
Un nombre de dominio completamente registrado. Este tutorial usará tu_dominio como ejemplo a lo largo de todo el tutorial. Puedes comprar un nombre de dominio en Namecheap, obtener uno gratis en Freenom, o usar el registrador de dominios de tu elección.
-
Se han configurado los siguientes registros DNS para su servidor. Puede seguir esta introducción a DNS de DigitalOcean para obtener detalles sobre cómo agregarlos.
- Un registro A con
tu_dominio
apuntando a la dirección IP pública de su servidor. - Un registro A con
www.tu_dominio
apuntando a la dirección IP pública de su servidor.
- Un registro A con
-
Apache instalado siguiendo Cómo instalar Apache en Ubuntu. Asegúrese de tener un archivo de host virtual para su dominio. Este tutorial usará
/etc/apache2/sites-available/tu_dominio.conf
como ejemplo.
Paso 1 — Instalando Certbot
Para obtener un certificado SSL con Let’s Encrypt, necesitas instalar el software Certbot en tu servidor. Utilizarás los repositorios de paquetes de Ubuntu por defecto para eso.
Primero, actualiza el índice local de paquetes:
Necesitas dos paquetes: certbot
y python3-certbot-apache
. Este último es un complemento que integra Certbot con Apache, haciendo posible automatizar la obtención de un certificado y la configuración de HTTPS en tu servidor web con un solo comando:
Se te solicitará que confirmes la instalación presionando S
, luego INTRO
.
Certbot ya está instalado en su servidor. En el siguiente paso, verificará la configuración de Apache para asegurarse de que su host virtual esté configurado adecuadamente. Esto garantizará que el script del cliente certbot
pueda detectar sus dominios y reconfigurar su servidor web para usar su certificado SSL recién generado automáticamente.
Paso 2 — Verificando la configuración de su host virtual de Apache
Para obtener y configurar automáticamente SSL para su servidor web, Certbot necesita encontrar el host virtual correcto dentro de sus archivos de configuración de Apache. Los nombres de dominio de su servidor se recuperarán de las directivas ServerName
y ServerAlias
definidas dentro de su bloque de configuración VirtualHost
Si siguió el paso de configuración del host virtual en el tutorial de instalación de Apache, debería tener un bloque VirtualHost configurado para su dominio en /etc/apache2/sites-available/su_dominio.conf
con las directivas ServerName
y también ServerAlias
ya configuradas adecuadamente.
Para confirmar que esto está configurado, abra el archivo del host virtual para su dominio usando nano
o su editor de texto preferido:
Encuentra las líneas existentes de ServerName
y ServerAlias
. Deben estar listadas como sigue:
...
ServerName your_domain
ServerAlias www.your_domain
...
Si ya tienes tu ServerName
y ServerAlias
configurados de esta manera, puedes salir de tu editor de texto y pasar al siguiente paso. Si tu configuración actual de host virtual no coincide con el ejemplo, actualízala conforme sea necesario. Si estás utilizando nano
, puedes salir presionando CTRL+X
, luego Y
y INTRO
para confirmar tus cambios, si los hay. A continuación, ejecuta el siguiente comando para validar tus cambios:
Deberías recibir Syntax OK
como respuesta. Si obtienes un error, vuelve a abrir el archivo del host virtual y revisa cualquier error tipográfico o caracteres que puedan faltar. Una vez que la sintaxis de tu archivo de configuración sea correcta, recarga Apache para que los cambios surtan efecto:
Con estos cambios, Certbot podrá encontrar el bloque VirtualHost correcto y actualizarlo.
Next, you’ll update the firewall to allow HTTPS traffic.
Paso 3 — Permitir el tráfico HTTPS a través del cortafuegos
Si tienes el cortafuegos UFW habilitado, como se recomienda en las guías de prerequisitos, necesitarás ajustar los ajustes para permitir el tráfico HTTPS. Después de la instalación, Apache registra varios perfiles de aplicación UFW diferentes. Puedes utilizar el perfil Apache Full para permitir tanto el tráfico HTTP como HTTPS en tu servidor.
Para verificar el tipo de tráfico que actualmente se permite en su servidor, consulte el estado:
Si siguió uno de nuestros guías de instalación de Apache, tendrá una salida similar a la siguiente, lo que significa que actualmente solo se permite tráfico HTTP en el puerto 80
:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
Para permitir el tráfico HTTPS, permita el perfil “Apache Full”:
Luego elimine el perfil redundante “Apache”:
Su estado se mostrará como sigue:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache Full (v6) ALLOW Anywhere (v6)
Ya está listo para ejecutar Certbot y obtener sus certificados.
Paso 4 — Obtener un Certificado SSL
Certbot ofrece diversas maneras de obtener certificados SSL a través de complementos. El complemento de Apache se encargará de reconfigurar Apache y recargar la configuración siempre que sea necesario. Para usar este complemento, ejecute lo siguiente:
Este script le solicitará que responda una serie de preguntas para configurar su certificado SSL. Primero, le pedirá una dirección de correo electrónico válida. Esta dirección de correo se utilizará para las notificaciones de renovación y avisos de seguridad:
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): you@your_domain
Después de proporcionar una dirección de correo electrónico válida, presione INTRO
para proceder al siguiente paso. Luego, se le pedirá que confirme si acepta los términos de servicio de Let’s Encrypt. Puede confirmar presionando S
y luego INTRO
:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
A continuación, se te preguntará si deseas compartir tu correo electrónico con la Electronic Frontier Foundation para recibir noticias y otra información. Si no deseas suscribirte a su contenido, escribe N
. De lo contrario, escribe Y
y luego presiona ENTER
para proceder al siguiente paso:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
El siguiente paso te solicitará informar a Certbot de los dominios en los que deseas activar HTTPS. Los nombres de dominio listados se obtienen automáticamente de tu configuración de host virtual de Apache, por lo que es importante asegurarte de tener los ajustes correctos de ServerName
y ServerAlias
configurados en tu host virtual. Si deseas habilitar HTTPS para todos los nombres de dominio listados (recomendado), puedes dejar la solicitud en blanco y presionar ENTER
para continuar. De lo contrario, selecciona los dominios en los que deseas habilitar HTTPS al listar cada número appropriado, separados por comas y/ o espacios, y luego presiona ENTER
:
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
Después de este paso, la configuración de Certbot está terminada y se te presentarán las observaciones finales sobre tu nuevo certificado y dónde encontrar los archivos generados:
OutputSuccessfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2022-07-10.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf
Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https:/your_domain and https://www.your_domain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Tu certificado ahora está instalado y cargado en la configuración de Apache. Intenta recargar tu sitio web usando https://
y observa el indicador de seguridad de tu navegador. Debería indicar que tu sitio está adecuadamente asegurado, generalmente con un ícono de candado en la barra de direcciones.
Puedes usar el SSL Labs Server Test para verificar la calificación de tu certificado y obtener información detallada sobre él, desde la perspectiva de un servicio externo.
En el siguiente y último paso, probarás la característica de renovación automática de Certbot, que garantiza que tu certificado se renovará automáticamente antes de la fecha de expiración.
Paso 5 — Verificando la Renovación Automática de Certbot
Los certificados de Let’s Encrypt solo son válidos durante noventa días. Esto es para fomentar que los usuarios automaticen su proceso de renovación de certificados, así como para asegurar que los certificados mal utilizados o las claves robadas caducen antes而不是 más tarde.
El paquete certbot
que instalaste se ocupa de las renovaciones incluyendo un script de renovación en /etc/cron.d
, que es gestionado por un servicio systemctl
llamado certbot.timer
. Este script se ejecuta dos veces al día y renovará automáticamente cualquier certificado que esté dentro de treinta días de expiración.
Para verificar el estado de este servicio y asegurarte de que está activo, ejecuta lo siguiente:
Tu salida será similar a la siguiente:
Output● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:>
Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago
Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left
Triggers: ● certbot.service
Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.
Para probar el proceso de renovación, puedes hacer una ejecución de prueba con certbot
:
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your_domain.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for your_domain and www.your_domain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/your_domain/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Si no recibes ningún error, ya estás listo. Cuando sea necesario, Certbot renovará tus certificados y recargará Apache para picking up los cambios. Si el proceso de renovación automática falla alguna vez, Let’s Encrypt enviará un mensaje a la correo electrónico que especificaste, advirtiéndote cuándo está a punto de expirar tu certificado.
Conclusión
En este tutorial, ha instalado el cliente de Let’s Encrypt certbot
, configurado e instalado un certificado SSL para su dominio y confirmado que el servicio de renovación automática de Certbot está activo dentro de systemctl
. Si tiene más preguntas sobre el uso de Certbot, su documentación es un buen lugar para comenzar.
Source:
https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu