Clicky

Habilitar HTTPS en un servidor web con Let's Encript

SSL/Lab CentOS 8

Instalar Let’s Encrypt en CentOS 8 con Apache y Webmin/Virtualmin

En estos tiempos de confinamiento que no se puede salir de casa, estoy montando un servidor web de última generación. Uno de los primeros pasos es la seguridad por ello hoy te mostraré cómo instalar Let’s Encrypt en un sistema Linux con CentOS 8, Apache y el panel de control de sitios web y alojamiento de dominios Webmin/Virtualmin.

Let's Encrypt es una autoridad de certificación completamente gratuita y automatizada desarrollada por Internet Security Research Group (ISRG) y reconocida por todos los principales navegadores. Facilitaa la configuración de certificados TLS para tu servidor web. ¡Y gratis!

Let’s Encrypt es compatible con los principales actores como Mozilla, Akamai, Cisco, EFF y es administrado por la Fundación Linux. Let's Encrypt proporciona certificados gratuitos, automáticos y seguros. Los propietarios de sitios o servidores web pueden obtener fácilmente certificados de seguridad en cuestión de minutos, lo que permite una experiencia web más segura para todos.

En el tutorial de hoy vamos a aprender cómo instalar un certificado SSL Let's Encrypt en CentOS 8 con Apache y Webmin/Virtualmin, e instalar el cliente certbot y cómo usarlo para administrar certificados en renovación automática.

Webmin seguro

1. Actualiza el sistema

Como de costumbre antes de instalar cualquier paquete, asegúrate de que el sistema esté completamente actualizado:

# dnf -y update

2. Instalar Apache

Vamos a usar Apache como nuestro servidor web, instálalo si no lo has hecho ya usando este comando:

# dnf -y install httpd

3. Instalar mod_ssl

Instala mod_ssl, porque lo vamos a necesitar para configurar nuestro certificado SSL Let's Encrypt:

# dnf -y install mod_ssl

4. Instalar certbot

Para instalar certbot primero debemos asegurarnos de tener habilitado el repositorio EPEL, para ello ejecuta el siguiente comando:

# dnf -y install epel-release

Luego instala certbot para Apache:

# dnf -y install certbot-apache

5. Obtener certificado Let’s Encrypt desde la línea de comandos

Ahora que tenemos certbot instalado, ejecuta certbot con uno de los siguientes comandos:

# certbot --apache

o

# /usr/local/bin/certbot-auto --apache

Certbot te pedirá los nombres para los que deseas activar HTTPS, en este caso como en el nuevo servidor sólo tengo un sitio web de prueba, la salida será la siguiente:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: ns381524.ip-91-121-80.eu
2: my-ebook.es
3: admin.my-ebook.es
4: mail.my-ebook.es
5: webmail.my-ebook.es
6: www.my-ebook.es
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1

En este caso como vamos a instalar el certificado sólo para el servidor web elegiremos la opción 1 y presionamos Enter.

Puede darte este aviso de más abajo: No pudimos encontrar un vhost con un ServerName o una dirección de ns381524.ip-91-121-80.eu.
¿Qué host virtual te gustaría elegir?

We were unable to find a vhost with a ServerName or Address of ns381524.ip-91-121-80.eu.
Which virtual host would you like to choose?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: httpd.conf | Multiple Names | | Enabled
2: httpd.conf | Multiple Names | HTTPS | Enabled
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Elegimos la opción 2 y presionamos Enter:

Deploying Certificate to VirtualHost /etc/httpd/conf/httpd.conf

Si lo deseas, puedes redirigir tu servidor a HTTPS:

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

En mi caso elegí la opción segunda obteniento el siguiente aviso:

Failed redirect for ns381524.ip-91-121-80.eu
Unable to set enhancement redirect for ns381524.ip-91-121-80.eu
Unable to find corresponding HTTP vhost; Unable to create one as intended addresses conflict; Current configuration does not support automated redirection

Por lo que tendremos que configurar manualmente Apache como se muestra más abajo en el paso 6. A pesar de eso Let ha emitido favorablemente el certificado:

IMPORTANT NOTES:
- We were unable to set up enhancement redirect for your server,
however, we successfully installed your certificate.
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/ns381524.ip-91-121-80.eu/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/ns381524.ip-91-121-80.eu/privkey.pem
Your cert will expire on 2020-07-08. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again with the "certonly" option. To non-interactively renew *all*
of your certificates, run "certbot-auto renew"

6. Configura Apache con SSL

Vamos a necesitar modificar el archivo /etc/httpd/conf.d/ssl.conf , añadir algunas líneas si no las tiene y la ruta de los certificados obtenidos anteriormente. Asegúrate que el archivo tiene la siguientes líneas descomentadas (sin la almohadilla # delante):

Listen 443 https
SSLEngine on
SSLCompression off
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLProxyProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder on
SSLCipherSuite HIGH:!aNULL

## Ruta a los certificados ##
SSLCertificateFile /etc/letsencrypt/live/ns381524.ip-91-121-80.eu/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/ns381524.ip-91-121-80.eu/chain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ns381524.ip-91-121-80.eu/privkey.pem

Ojo: Sustituye ns381524.ip-91-121-80.eu con el nombre de tu servidor (lo puedes obtener con el comando hostname) y asegúrate que las rutas indicadas bajo Congratulations! Your certificate and chain have been saved at: son las mismas que las del ejemplo, sino modifícalas según lo que te haya dado la salida del cerbot. Eso si, debes colocar las tres líneas que acaban en cert.pem, chain.pem y privkey.pem .

Debes reiniciar Apache para que los cambios surjan efecto:

# systemctl restart httpd.service

7. Configurar renovación automática

Ahora vamos a agregar un cronjob para que nuestros certificados SSL Let Let's Encrypt se puedan renovar automáticamente (también lo podemos hacer con Webmin/Virtualmin como veremos más abajo).

Primero ejecuta el siguiente comando para que podamos tener nano como editor predeterminado:

# export EDITOR=/bin/nano

Luego ejecuta el siguiente comando para editar el crontab:

# crontab -e

Encrypt recomienda la renovación automática del cronjob para que se ejecute dos veces al día; para ello, agrega la siguiente línea y luego guarda y sal del crontab:

* */12 * * * /usr/bin/certbot renew >/dev/null 2>&1

Ahora deberías haber instalado y configurado con éxito Let’s Encrypt en Apache.

Puedes ver la valoración de SSL Labs de Qualys en https://www.ssllabs.com/ssltest/analyze.html introduciendo la URL de tu servidor. En mi caso tengo los Cipher mal configurados y por eso me da una valoración sólo de A:

ssl lab Centos 8

8. Añadir el certificado de Let's Encript en Webmin/Virtualmin

NOTA: Doy por supuesto que tienes instalado Webmin/Virtualmin (sino deberás esperar al siguiente tutorial donde lo explicaré).

Inicia sesión en Webmin/Virtualmin y en Webmin ve a Webmin Configuration → SSL Encryption

Webmin configuration

Colocaremos la ruta de los certificados vistas más arriba como se indica en la imagen:

Webmin SSL Encrytion

Y pulsaremos Save

Si nos vamos a la pestaña Current Certificate podremos ver la fecha de validez del certificado:

Webmin Certificado actual

Para la renovación desde Webmin, en la pestaña Let's Encript debemos marcar abajo en Months between automatic renewal, 2 para dos meses (Let's Encript sólo admite renovaciones cada tres meses)

Webmin Certificado renovación

Espero que este tutorial te haya ayudado a instalar un certificado Let’s Encrypt en CentOS 8 con Apache y Webmin/Virtualmin.

Jesus_Caceres