En este momento estás viendo Instalar certificado para HTTPS con Certbot

Instalar certificado para HTTPS con Certbot

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.

Esta entrada tiene 2 comentarios

  1. Barto

    Gracias Javier. Buen trabajo

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.