Tutorial

Cómo proteger Apache con Let's Encrypt en Ubuntu 18.04

Published on December 5, 2019
Español
Cómo proteger Apache con Let's Encrypt en Ubuntu 18.04

Introducción

Let’s Encrypt es una entidad de certificación (CA) que proporciona una manera sencilla de obtener e instalar certificados de TLS/SSL gratuitos, lo que permite usar HTTPS cifrado en servidores web. Simplifica el proceso al proporcionar un cliente de software, Certbot, que intenta automatizar la mayoría (cuando no todos) de los pasos requeridos. Actualmente, todo el proceso de obtención e instalación de un certificado está totalmente automatizado en Apache y Nginx.

En este tutorial, utilizará Certbot para obtener un certificado de SSL gratuito para Apache en Ubuntu 18.04 y configurará su certificado para que se renueve de forma automática.

En este tutorial se utilizará un archivo de host virtual de Apache por separado en lugar del archivo de configuración predeterminado. Recomendamos crear nuevos archivos de host virtual de Apache para cada dominio, ya que permite evitar errores comunes y mantiene los archivos predeterminados como una configuración de reserva.

Requisitos previos

Para este tutorial, necesitará lo siguiente:

  • Un servidor de Ubuntu 18.04 configurado conforme a este tutorial de configuración inicial para servidores de Ubuntu 18.04, incluido un usuario sudo no root y un firewall.

  • Un nombre de dominio registrado por completo. En este tutorial, se utilizará your_domain como ejemplo. Puede adquirir un nombre de dominio en Namecheap, obtener uno gratuito en Freenom o utilizar un registrador de dominios de su elección.

  • Los dos registros DNS que se indican a continuación se han configurado para su servidor. Puede utilizar esta introducción al DNS de DigitalOcean para obtener más información sobre cómo agregarlos.

    • Un registro A con your_domain orientado a la dirección IP pública de su servidor.
    • Un registro A con www.your_domain orientado a la dirección IP pública de su servidor.
  • Apache instalado conforme a Cómo instalar Apache en Ubuntu 18.04. Compruebe que tenga un archivo de host virtual para su dominio. En este tutorial, se utilizará /etc/apche2/sites-available/your_domain.conf como ejemplo.

Paso 1: Instalar Certbot

El primer paso para utilizar Let’s Encrypt para obtener un certificado SSL es instalar el software Certbot en su servidor.

Existe mucha actividad relacionada con el desarrollo de Certbot. Esto hace que sus paquetes proporcionados por Ubuntu suelan perder vigencia. Sin embargo, los desarrolladores de Certbot mantienen un repositorio de software de Ubuntu con versiones actualizadas, de modo que en su lugar usaremos ese repositorio.

Primero, agregue el repositorio:

  1. sudo add-apt-repository ppa:certbot/certbot

Debe presionar ENTER para aceptar.

Instale el paquete Apache de Certbot con apt:

  1. sudo apt install python-certbot-apache

Con esto, Certbot estará listo para utilizarse. Sin embargo, para que configure SSL para Apache debemos verificar parte de la configuración de Apache.

Paso 2: Configurar el certificado SSL

Certbot debe poder encontrar el host virtual adecuado en su configuración de Apache para poder configurar SSL de forma automática. De forma específica, lo hace buscando una directiva ServerName que coincida con el dominio para el que usted solicite un certificado.

Si siguió el paso de configuración del host virtual en el tutorial de instalación de Apache, debe disponer de un bloque VirtualHost para su dominio en /etc/apache2/sites-available/your_domain.com.conf con la directiva ServerName ya establecida de forma adecuada.

Para comprobarlo, abra el archivo de host virtual para su dominio utilizando nano o el editor de texto que prefiera:

  1. sudo nano /etc/apache2/sites-available/your_domain.conf

Busque la línea de ServerName existente. Debería tener el siguiente aspecto:

/etc/apache2/sites-available/your_domain.conf
...
ServerName your_domain;
...

Si esto sucede, salga de su editor y continúe con el paso siguiente.

De lo contrario, actualícelo para que coincida. A continuación, guarde el archivo, cierre el editor y verifique la sintaxis de las modificaciones de la configuración:

  1. sudo apache2ctl configtest

Si encuentra un mensaje de error, vuelva a abrir el archivo de host virtual y verifique que no haya errores ortográficos y que no falten caracteres. Una vez que la sintaxis de su archivo de configuración sea correcta, vuelva a abrir Apache para cargar la configuración nueva:

  1. sudo systemctl reload apache2

Ahora, Certbot podrá encontrar el bloque VirtualHost correcto y actualizarlo.

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

Paso 3: Habilitar HTTPS a través del firewall

Si tiene habilitado el firewall de ufw, como se recomienda en las guías de los requisitos previos, deberá ajustar la configuración para permitir el tráfico de HTTPS. Afortunadamente, Apache registra algunos perfiles con ufw después de la instalación.

Puede ver la configuración actual escribiendo lo siguiente:

  1. sudo ufw status

Probablemente tendrá este aspecto, lo cual significa que solo se permite el tráfico de HTTP al servidor web:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

Para permitir de forma adicional el tráfico de HTTPS, habilite el perfil de Apache Full y borre el permiso del perfil redundante de Apache:

  1. sudo ufw allow 'Apache Full'
  2. sudo ufw delete allow 'Apache'

Ahora, su estado debería tener el siguiente aspecto:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)

A continuación, ejecutaremos Certbot y buscaremos nuestros certificados.

Paso 4: Obtener un certificado SSL

Certbot ofrece varias alternativas para obtener certificados SSL a través de complementos. El complemento de Apache se encargará de reconfigurar Apache y volver a cargar la configuración cuando sea necesario. Para utilizar este complemento, escriba lo siguiente:

  1. sudo certbot --apache -d your_domain -d www.your_domain

Con esto, se ejecuta certbot con el complemento --apache, usando -d a fin de especificar los nombres para los cuales desea que el certificado tenga validez.

Si es la primera vez que ejecuta certbot, se le solicitará introducir una dirección de correo electrónico y aceptar las condiciones de servicio. A continuación, certbot se comunicará con el servidor de Let’s Encrypt y, luego, realizará una comprobación para verificar que usted controle el dominio para el que solicita un certificado.

Si la comprobación se realiza correctamente, certbot le preguntará cómo desea configurar sus ajustes de 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 presione ENTER. La configuración se actualizará y Apache se volverá a cargar para aplicar los ajustes nuevos. certbot concluirá con un mensaje que le indicará que el proceso se realizó con éxito y le brindará información sobre la ubicación de sus certificados:

Output
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your cert will expire on 2018-07-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

Así, sus certificados se quedarán descargados, instalados y cargados. Intente volver a cargar su sitio web utilizando https:// y observe el indicador de seguridad de su navegador. Debería indicar que el sitio cuenta con la protección correcta, en general, con un ícono de un candado verde. Si prueba su servidor utilizando SSL Labs Server Test, obtendrá una calificación A.

Terminaremos con una prueba del proceso de renovación.

Paso 5: Verificar la renovación automática de Certbot

Los certificados de Let’s Encrypt son válidos únicamente por noventa días. El propósito de esto es incentivar a los usuarios a automatizar sus procesos de renovación de certificados. El paquete de certbot que instalamos se encargará de esto agregando una secuencia de comandos de renovación a /etc/cron.d. Esta secuencia de comandos se ejecuta dos veces al día y renovará de forma automática cualquier certificado que caduque en treinta o menos días.

Para probar el proceso de renovación, puede hacer un simulacro con certbot:

  1. sudo certbot renew --dry-run

Si no ve errores, no habrá inconvenientes. Cuando sea necesario, Certbot renovará sus certificados y volverá a cargar Apache para registrar los cambios. Si el proceso de renovación automática falla, Let’s Encrypt enviará un mensaje a la dirección de correo electrónico que especificó en el que se le advertirá cuándo se aproxime la fecha de vencimiento de sus certificados.

Conclusión

En este tutorial, instaló el certbot del cliente Let’s Encrypt, descargó certificados SSL para su dominio, configuró Apache para utilizarlos y definió la renovación automática de certificados. Si tiene preguntas adicionales sobre la utilización de Certbot, la documentación es un buen punto de partida.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors
Default avatar

Developer Advocate

Dev/Ops passionate about open source, PHP, and Linux.



Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
3 Comments


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

buenas noches, gracias por el aporte. si tengo 2 o más dominios. es posible seguir los pasos para cada uno de los dominios y funcionará igual?

Chicas, gracias por compartir. quería comentarles que pude instalar un certificado Wildcard con el comando:

sudo certbot certonly –manual -d *.example.com -d example.com –agree-tos –no-bootstrap –manual-public-ip-logging-ok –preferred-challenges dns-01 –server https://acme-v02.api.letsencrypt.org/directory

He llegado a recibir el «Congratulations» del certificado, sin embargo la página sigue sin cargar en HTTPS. En uno de los Post que revisé me dicen que debo configurar manualmente el Virtual Host, pero lo he intentado y no logro hacer que cargue en HTTPS.

Les agradecería que pudieran ayudarme.

Hola, gracias por compartir. Me ha sido muy útil vuestras indicaciones. Solo una cosa, es un pequeño error de typeo, en “requisitos previos” en la linea “/etc/apche2/sites-available/your_domain.conf” falta la letra “a” de apache2.

Solo eso, de resto todo perfecto.

Saludos.

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Become a contributor for community

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

DigitalOcean Documentation

Full documentation for every DigitalOcean product.

Resources for startups and SMBs

The Wave has everything you need to know about building a business, from raising funding to marketing your product.

Get our newsletter

Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

New accounts only. By submitting your email you agree to our Privacy Policy

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.