Instalar certificado para HTTPS con Certbot
En los posts anteriores hemos instalado y configurado la pila LEMP «Linux, Nginx, MariaBD y PHP». En este, vamos a ver como instalar un certificado SSL/TLS para securizar nuestro sitio web. Para ello utilizaremos Cerbot.
No obstante, si estás buscando agregar los beneficios de seguridad y privacidad de un certificado HTTPS a tu sitio web, es posible que no necesites Certbot. Muchos proveedores de alojamiento tienen herramientas internas para habilitar HTTPS. Antes de utilizar Certbot, comprueba si tu proveedor de alojamiento es uno de ellos.
Certbot renueva los certificados cada 60 días. Para obtener más información sobre cómo funciona Certbot y los recursos administrados por la comunidad, consulta la siguiente página de ayuda de Cerbot.
El complemento Certbot admite las arquitecturas x86_64, ARMv7 y ARMv8. Si bien es altamente recomendable, y más sencillo, instalar Certbot a través del complemento, puedes encontrar instrucciones de instalación alternativas en este enlace.
Sumario
- Consideraciones previas
- SSH instalado en el servidor
- Instalacion de snapd
- Distribuciones con snap preinstalado.
- Distribuciones sin snap preinstalado.
- Instalación de snap en Debian
- Certbot
- Desinstalación de certbot-auto
- Instalar Certbot
- Modos de ejecución de Certbot
- Obtener e instalar el certificados
- O solo obtener un certificado
- Confirmar que el certificado funciona
Consideraciones previas
La línea de comandos es una forma de interactuar con una máquina escribiendo comandos basados en texto y recibiendo respuestas basadas en texto. Certbot se ejecuta desde una interfaz de línea de comandos, generalmente en un servidor similar a Unix. Para utilizar Certbot para la mayoría de los propósitos, deberemos poder instalarlo y ejecutarlo en la línea de comandos de nuestro servidor web, al que generalmente accederemos a través de SSH.
Para que los navegadores web soliciten el contenido de las páginas web y otros recursos en línea de los servidores web, HTTP (Protocolo de transferencia de hipertexto) es el método tradicional, pero es inseguro. Es un estándar de Internet que normalmente utiliza el puerto TCP 80. Casi todos los sitios web del mundo admiten HTTP, pero los sitios web que se han configurado con Certbot o algún otro método para configurar HTTPS pueden redirigir automáticamente a los usuarios desde la versión HTTP del sitio a la versión HTTPS.
Prerequisitos
Para instalar el certificado debes tener un dominio de tu propiedad, Certbot se utiliza, generalmente, para cambiar un sitio existente, que utiliza el protocolo HTTP, al uso del protocolo HTTPS (Certbot realizará las renovaciones del certificado cuando sea necesario). Partimos de la premisa de que tenemos un sitio web que escucha en el puerto 80 con el protocolo HTTP.
Es decir, que si introducimos en un navegador web http://nuestro_sitio_web, el servidor responde y aparece algún tipo de contenido (aunque sea una página de bienvenida y no la definitiva que vayamos a crear). Algunos métodos para usar Certbot tienen esto como un requisito previo, por ello, lo mejor es que tengamos un sitio configurado con HTTP, escuchando en el puerto 80. Si no se puede acceder a nuestro sitio así, para obtener un certificado con Certbot, necesitaremos hacer una validación de DNS.
Los diferentes servicios de Internet utilizan, normalmente, unos puertos específicos TCP. El protocolo sin cifrar HTTP usa el puerto 80 y HTTPS, cifrado, el 443.
Cerbot
Para usar el complemento independiente de certbot, no necesitamos un sitio pre-existente, pero tenemos que asegurarnos de que las conexiones al puerto 80 de nuestro servidor no estén bloqueadas por un firewall, como UFW o incluso, un firewall del proveedor de servicios de Internet o del proveedor de alojamiento web. Si no lo tenemos claro, tendremos que preguntar a la ISP o al proveedor de alojamiento web. El uso de la validación de DNS no requiere que Let’s Encrypt realice ninguna conexión entrante a nuestro servidor, por lo que con este método, no es necesario tener un sitio web HTTP existente o la capacidad de recibir conexiones en el puerto 80.
Certbot actualmente requiere que tengamos instalada la versión de Python 3.6 o superior en un sistema operativo similar a UNIX. Por defecto, requiere acceso de root para escribir en /etc/letsencrypt, /var/log/letsencrypt, /var/lib/letsencrypt, para enlazar al puerto 80, si usamos el complemento independiente, y para leer y modificar las configuraciones del servidor web, si usamos los complementos apache o nginx. Si no utilizamos estos complementos, deberíamos poder ejecutarlo sin privilegios de root, pero para la mayoría de los usuarios que quieren evitar ejecutar un cliente ACME como root, letsencrypt-nosudo o simp_le son las opciones más apropiadas.
SSH instalado en el servidor
Necesitamos tener instalado SSH en el servidor que ejecuta el sitio web HTTP y un usuario con privilegios de sudo. Puedes ver como se instala y configura en este enlace.
Nos conectamos al servidor con ssh
ssh usuario@ip_servidor
Instalaciópn de snapd
Necesitamos instalar snapd y habilitar el soporte de snap clásico.
La mayoría de las distribuciones GNU/Linux modernas, prácticamente todas las que usan systemd, pueden instalar Certbot empaquetado como un complemento. Los snaps están disponibles para arquitecturas x86_64, ARMv7 y ARMv8. El complemento Certbot proporciona una manera fácil de asegurarnos de que tenemos la última versión de Certbot con características como la renovación automática de certificados preconfigurada.
Distribuciones con snap preinstalado
KDE Neon,Manjaro, Solus 3 y posteriores,Ubuntu 20.10 y Ubuntu 21.04, Ubuntu 20.04 LTS(Focal Fossa), Ubuntu 18.04 LTS(Bionic Beaver), la mayoría de los sabores Ubuntu, Zorin OS.
Distribuciones sin snap preinstalado
Arch Linux, CentOS, Debian, Elementary OS, Fedora, GalliumOS, Kali Linux, KDE Neon*, Kubuntu, Linux Mint, Lubuntu, Manjaro*, openSUSE, Parrot Security OS, Pop!_OS, Raspberry Pi OS, Red Hat Enterprise Linux (RHEL), Rocky Linux, Solus, Ubuntu*, Xubuntu, Zorin OS*.
NOTA: *Snap está preinstalado en estos sistemas. Si queremos volver a instalar Snap o tenemos alguna versión anterior, las siguientes instrucciones de instalación nos pueden ayudar.
Instalación de snap en Debian
Como siempre que vamos a instalar algo, actualizamos la lista de paquetes de los repositorios
sudo apt-get update
Instalamos el demonio directamente desde los repositorios con el comando
sudo apt-get install snapd
Le decimos que si «S», y continuará con la instalación.
Si no tenemos el comando sudo instalado, seguramente por proporcionar una contraseña de root durante la instalación del S.O., podemos instalar snap convirtiéndonos en root primero, con los siguientes comandos
su root apt-get update apt-get install snapd
Una vez instalado snap, tenemos que cerrar la sesión o reiniciar el sistema, para que las rutas de Snap se actualicen correctamente. Lo hacemos con «sudo reboot». Nos cerrara la conexion por ssh y deberemos volver a conectarnos para seguir con la instalación. Ten en cuenta que si el servidor no está a tu alcance físicamente, si lo cierras con «sudo shutdown now», no podrás volver a arrancarlo.
Ahora tenemos que instalar el complemento principal para obtener el último complemento.
sudo snap install core
Vemos la versión instalada en la captura anterior
core 16-2.52.1 from Canonical✓ installed
Nota: algunas instantáneas requieren nuevas funciones de snapd y mostrarán un error como «snap lxd asume características no admitidas» durante la instalación. Para resolver este problema tenemos que asegurarnos de que el snap principal está instalado con «sudo snap install core» y que sea la última versión con «sudo snap refresh core».
Y ya tenemos instalado y listo para funcionar Snap. Si estamos utilizando un S.O. escritorio, con entorno gráfico, ahora podríamos instalar la aplicación «Snap Store».
En versiones anteriores a Debian 9 no está disponible Snap.
Para instalar el demonio en otras distribuciones, consulta la página oficial del proyecto.
Para asegurarnos de que snap esta actualizado a la última versión, tenemos que ejecutar los siguientes comandos.
sudo snap refresh core
Certboot
Certboot es un proyecto gratuito de código abierto, parte del compromiso de EFF «Electronic Frontier Foundation» de hacer que el cifrado sea accesible para todos.
Certbot es una herramienta de software de código abierto y gratuita para usar automáticamente los certificados «Let’s Encrypt» en sitios web administrados manualmente para habilitar HTTPS.
Certbot está creado por «Electronic Frontier Foundation» (EFF), una organización sin ánimo de lucro, con sede en San Francisco. Una CA «Autoridad Certificadora», que defiende la privacidad digital, la libertad de expresión y la innovación.
Para instalar Cerbot, previamente tenemos que eliminar certbot-auto y cualquier paquete Certbot de nuestro S.O.
Si tenemos algún paquete de Certbot, instalado utilizando un administrador de paquetes de sistema operativo como apt, dnf o yum, deberemos eliminarlo antes de instalar el complemento Certbot, para asegurarnos de que cuando ejecute el comando certbot, se utilice el complemento, en lugar de la instalación desde el paquete del S.O. Según que S.O. utilicemos, el comando a ejecutar será diferente, dependiendo del gestor de paquetes nativo del S.O. Los más comunes son: «sudo apt-get remove certbot», «sudo dnf remove certbot» o «sudo yum remove certbot».
Si hubiésemos utilizado Certbot a través del script certbot-auto, también necesitaríamos eliminar su instalación. Veamos como hacerlo.
Desinstalación de certbot-auto
El procedimiento para desinstalar certbot-auto, son tres pasos:
1.- Si, para renovar nuestros certificados, tenemos una tarea cron o un temporizador systemd que ejecute certbot-auto automáticamente, es necesario eliminarlo. Podemos eliminar la entrada a /etc/crontab ejecutando el siguiente comando como sudo
sudo sed -i '/certbot-auto/d' /etc/crontab
2.- Tenemos que eliminar el script certbot-auto. Lo normal es que lo tengamos en /usr/local/bin. Ejecutamos
sudo rm /usr/local/bin/certbot-auto
3.- También tenemos que eliminar la instalación de Certbot creada por certbot-auto ejecutando
sudo rm -rf /opt/eff.org
Instalar Certbot
Para realizar la nueva instalación de Certbot, ejecutamos el siguiente comando
sudo snap install --classic certbot
certbot 1.22.0 from Certbot Project (certbot-eff✓) installed
Para asegurarnos de que se puede ejecutar el comando certbot, ejecutamos la siguiente instrucción para crear un enlace
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Modos de ejecución de Certbot
Tenemos dos opciones para ejecutar cerbot.
Obtener e instalar el certificado
Ejecutando este comando obtendremos un certificado y Certbot editará la configuración de nginx automáticamente para servirla, activando el acceso HTTPS en un solo paso. Se ejecutará un script que hará toda la configuración por nosotros. Opcionalmente, podemos instalar este certificado en servidores web compatibles (como Apache o nginx) y otros tipos de servidores. Esto se hace modificando automáticamente la configuración de nuestro servidor para poder utilizar el certificado.
sudo certbot --nginx
Nos pedirá un correo electrónico y los dominios a certificar. Ademas nos solicitará varias confirmaciones. Le decimos «Y» a todo y ya tendremos el certificado instalado.
Si nos diera algún error en /var/log/letsencrypt/letsencrypt.log podremos localizarlo para depurarlo.
El complemento Nginx debería funcionar para la mayoría de las configuraciones. Te recomiendo hacer una copia de seguridad de las configuraciones de Nginx antes de usarlo (aunque también podemos revertir los cambios en las configuraciones con «certbot –nginx rollback»).
O solo obtener un certificado
Si queremos hacer los cambios a nuestra configuración de nginx manualmente, tenemos que ejecutar el siguiente comando. Con esta opción obtendremos un certificado que tendremos que configurar en el servidor. Para ello tendremos que realizar los pasos de autenticación requeridos para demostrar que somos los propietarios de los dominios. Tenemos que guardar el certificado obtenido en /etc/letsencrypt/live/ y renovarlo periódicamente.
sudo certbot certonly --nginx
Si tenemos varios dominios, podemos especificar «-d» en cada uno de ellos y obtener e instalar diferentes certificados ejecutando Certbot para cada uno de ellos.
certbot certonly -d ejemplo1.com -d www.ejemplo1.com certbot certonly -d ejemplo2.com -d www.ejemplo2.com
El comando para renovar certbot se instala en una de las siguientes ubicaciones:
/etc/crontab/
/etc/cron./
systemctl list-timers
Confirmar que el certificado funciona
Para confirmar que la configuración es correcta, en un navegador introducimos la URL de nuestro sitio (https://nuestro_sitio_web.com) y comprobamos que en la barra de direcciones aparece un candado.
Para más información sobre cerbot, podemos buscarla en la pagina de documentación de Cerbot.
Si tu sitio web corre en un servidor diferente o usas un sistema operativo distinto en la página oficial del proyecto podrás encontrar información para cada caso.
¿Tienes algún comentario que hacer sobre este artículo?, al pie del post tienes un formulario para hacerlo.
Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.
Y para suscribirte y recibir las novedades publicadas, tienes un enlace en el pie de la página o desde aquí mismo.
Gracias Javier. Buen trabajo
Gracias Barto.