Introducción
Let’s Encrypt es una autoridad de certificación (CA) que facilita la obtención e instalación de certificados TLS/SSL gratuitos , lo que permite el cifrado HTTPS en servidores web. Agiliza 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 esta guía, utilizará Certbot para obtener un certificado SSL gratuito para Apache en Ubuntu y se asegurará de que este certificado esté configurado para renovarse automáticamente.
Este tutorial utiliza un archivo de host virtual independiente en lugar del archivo de configuración predeterminado de Apache para configurar el sitio web que se protegerá con 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 respaldo.
Cómo proteger Apache con Let’s Encrypt en Ubuntu
- Instalación de Certbot
- Comprobación de la configuración del host virtual Apache
- Permitir HTTPS a través del firewall
- Obtener un certificado SSL
- Verificación de la renovación automática de Certbot
Prerrequisitos
Para seguir este tutorial, necesitarás:
- Un servidor Ubuntu configurado con un usuario no root con
sudo
privilegios administrativos y el firewall habilitado. Puede configurarlo siguiendo nuestro tutorial de configuración inicial de servidores para Ubuntu . - Un nombre de dominio completamente registrado. Este tutorial usará “your_domain” como ejemplo. Puedes comprar un nombre de dominio en Namecheap , obtener uno gratis en Freenom o usar el registrador de dominios que prefieras.
- Los dos siguientes registros DNS están configurados para su servidor. Puede consultar esta introducción al DNS de IsnHosting para obtener más información sobre cómo agregarlos.
- Un registro A que
your_domain
apunta a la dirección IP pública de su servidor. - Un registro A que apunta a la dirección IP pública de su servidor.
www.your_domain
- Un registro A que
- Apache se instaló siguiendo el procedimiento “Cómo instalar Apache en Ubuntu” . Asegúrate de tener un archivo de host virtual para tu dominio. Este tutorial se usará como ejemplo.
/etc/apache2/sites-available/your_domain.conf
Paso 1: Instalación de Certbot
Para obtener un certificado SSL con Let’s Encrypt, debe instalar el software Certbot en su servidor. Para ello, usará los repositorios de paquetes predeterminados de Ubuntu.
Primero, actualice el índice del paquete local:
sudo apt update
Necesita dos paquetes: certbot
y python3-certbot-apache
. Este último es un complemento que integra Certbot con Apache, lo que permite automatizar la obtención de un certificado y la configuración de HTTPS en su servidor web con un solo comando:
sudo apt install certbot python3-certbot-apache
Se le pedirá que confirme la instalación presionando Y
y luego ENTER
.
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 correctamente. Esto garantizará que el certbot
script del cliente pueda detectar sus dominios y reconfigurar su servidor web para usar automáticamente el certificado SSL recién generado.
Paso 2: Comprobación de la configuración del host virtual Apache
Para obtener y configurar automáticamente el SSL para su servidor web, Certbot necesita encontrar el host virtual correcto en sus archivos de configuración de Apache. Los nombres de dominio de su servidor se obtendrán de las ServerName
directivas ServerAlias
y definidas en su VirtualHost
bloque de configuración.
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 con las directivas y también las directivas ya configuradas adecuadamente./etc/apache2/sites-available/your_domain.conf
ServerName
ServerAlias
Para confirmar que esto está configurado, abra el archivo de host virtual de su dominio usando nano
su editor de texto preferido:
sudo nano /etc/apache2/sites-available/your_domain.conf
Encuentre las líneas ServerName
y existentes ServerAlias
. Deben estar listadas de la siguiente manera: /etc/apache2/sitios-disponibles/su_dominio.conf
...
ServerName your_domain
ServerAlias www.your_domain
...
Si ya tiene su ServerName
y ServerAlias
configurado así, puede salir del editor de texto y continuar con el siguiente paso. Si la configuración actual de su host virtual no coincide con el ejemplo, actualícela. Si usa nano
, puede salir pulsando CTRL+X
, y luego Y
y ENTER
para confirmar los cambios, si los hay. A continuación, ejecute el siguiente comando para validar los cambios:
sudo apache2ctl configtest
Debería recibir Syntax OK
una respuesta. Si recibe un error, vuelva a abrir el archivo del host virtual y compruebe si hay errores tipográficos o caracteres faltantes. Una vez que la sintaxis del archivo de configuración sea correcta, reinicie Apache para que los cambios surtan efecto:
sudo systemctl reload apache2
Con estos cambios, Certbot podrá encontrar el bloque VirtualHost correcto y actualizarlo.
A continuación, actualizará el firewall para permitir el tráfico HTTPS.
Paso 3: Permitir HTTPS a través del firewall
Si tiene habilitado el firewall UFW, como se recomienda en las guías de prerrequisitos, deberá ajustar la configuración para permitir el tráfico HTTPS. Tras la instalación, Apache registra diferentes perfiles de aplicación UFW. Puede usar el perfil completo de Apache para permitir el tráfico HTTP y HTTPS en su servidor.
Para verificar qué tipo de tráfico está permitido actualmente en su servidor, verifique el estado:
sudo ufw status
Si siguió una de nuestras guías de instalación de Apache, obtendrá un resultado similar al siguiente, lo que significa que 80
actualmente solo se permite el tráfico HTTP en el puerto:
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, habilite el perfil “Apache Full”:
sudo ufw allow 'Apache Full'
A continuación elimine el perfil redundante “Apache”:
sudo ufw delete allow 'Apache'
Su estado se mostrará de la siguiente manera:
sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache Full (v6) ALLOW Anywhere (v6)
Ahora está listo para ejecutar Certbot y obtener sus certificados.
Paso 4: Obtener un certificado SSL
Certbot ofrece diversas maneras de obtener certificados SSL mediante complementos. El complemento de Apache se encargará de reconfigurar Apache y recargar la configuración cuando sea necesario. Para usar este complemento, ejecute lo siguiente:
sudo certbot --apache
Este script le solicitará que responda a una serie de preguntas para configurar su certificado SSL. Primero, le solicitará una dirección de correo electrónico válida. Esta dirección se utilizará para 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
Tras proporcionar una dirección de correo electrónico válida, pulse ENTER
para continuar. Se le pedirá que confirme si acepta los términos de servicio de Let’s Encrypt. Puede confirmar pulsando Y
y luego ENTER
:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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 le preguntará si desea compartir su correo electrónico con la Electronic Frontier Foundation para recibir noticias e información. Si no desea suscribirse a su contenido, escriba N
. De lo contrario, escriba Y
y luego presione ENTER
para continuar.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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 le solicitará que informe a Certbot sobre los dominios para los que desea activar HTTPS. Los nombres de dominio se obtienen automáticamente de la configuración de su host virtual Apache, por lo que es importante asegurarse de tener la configuración correcta ServerName
en ServerAlias
su host virtual. Si desea habilitar HTTPS para todos los nombres de dominio (recomendado), puede dejar el mensaje en blanco y presionar ENTER
para continuar. De lo contrario, seleccione los dominios para los que desea habilitar HTTPS indicando cada número correspondiente, separado por comas o espacios, y luego presione 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 habrá finalizado y se le presentarán las observaciones finales sobre su nuevo certificado y dónde ubicar 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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Su certificado ya está instalado y cargado en la configuración de Apache. Intente recargar su sitio web https://
y observe el indicador de seguridad de su navegador. Debería indicar que su sitio está correctamente protegido, generalmente con un icono de candado en la barra de direcciones.
Puedes utilizar el Test de Servidor SSL Labs para verificar la calificación de tu certificado y obtener información detallada sobre el mismo, desde la perspectiva de un servicio externo.
En el siguiente y último paso, probará la función de renovación automática de Certbot, que garantiza que su certificado se renovará automáticamente antes de la fecha de vencimiento.
Paso 5: Verificación de la renovación automática de Certbot
Los certificados de Let’s Encrypt solo tienen una validez de noventa días. Esto anima a los usuarios a automatizar el proceso de renovación de sus certificados y a garantizar que los certificados mal utilizados o las claves robadas caduquen lo antes posible.
El certbot
paquete que instaló gestiona las renovaciones mediante un script de renovación /etc/cron.d
, administrado por un systemctl
servicio llamado certbot.timer
. Este script se ejecuta dos veces al día y renovará automáticamente cualquier certificado con un vencimiento dentro de los treinta días.
Para comprobar el estado de este servicio y asegurarse de que esté activo, ejecute lo siguiente:
sudo systemctl status certbot.timer
El resultado será similar al 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, puede realizar un ensayo con certbot
:
sudo certbot renew --dry-run
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 recibe ningún error, ya está todo listo. Cuando sea necesario, Certbot renovará sus certificados y reiniciará Apache para que se apliquen los cambios. Si el proceso de renovación automática falla, Let’s Encrypt le enviará un mensaje al correo electrónico que especificó para avisarle cuando su certificado esté a punto de caducar.
Conclusión
En este tutorial, instaló el cliente Let’s Encrypt certbot
, configuró e instaló un certificado SSL para su dominio y confirmó que el servicio de renovación automática de Certbot está activo en [nombre del dominio] systemctl
. Si tiene más preguntas sobre el uso de Certbot, su documentación es un buen punto de partida.
Excellent read! Managing cloud servers can feel daunting, but platforms like Cloudways make it effortless without sacrificing performance. Their approach to simplifying server management while ensuring scalability is spot-on—highly recommend for anyone craving a hassle-free hosting experience. Keep the great content coming!