Vamos a cifrar es una autoridad de certificación (CA) automatizada y abierta operada por Internet Security Research Group (ISRG) y fundada por Electronic Frontier Foundation (EFF), Mozilla Foundation y otros. Proporciona certificados SSL/TLS gratuitos que se usan comúnmente para cifrar las comunicaciones por motivos de seguridad y privacidad, siendo el caso de uso más notable HTTPS. Let's Encrypt se basa en el protocolo ACME (Entorno de gestión automática de certificados) para emitir, revocar y renovar certificados. Certbot es una utilidad gratuita y de código abierto que se utiliza principalmente para administrar certificados SSL/TLS de Let's Encrypt Autoridad certificada. Está disponible para la mayoría de los sistemas operativos UNIX y similares a UNIX, incluidos GNU/Linux, FreeBSD, OpenBSD y OS X. Esta guía proporcionará una introducción independiente de la plataforma al uso de certbot.
Requisitos
- Un nombre de dominio registrado con un registro A que apunta a su dirección IPv4. `www.example.com` se usará como ejemplo.
- Acceso a un shell privilegiado.
Conceptos Generales
Modos de operación
El uso de certbot para habilitar HTTPS se puede dividir en dos partes:autenticación e instalación. El primero requiere resolver un desafío y guardar el certificado y otros archivos. El paso de instalación implica configurar y asegurar el servidor web. Certbot puede realizar ambos automáticamente, con el subcomando ejecutar. Los subcomandos certonly e install son para los pasos de autenticación e instalación respectivamente.
Certbot también incluye funciones de renovación y revocación de certificados.
Desafíos
Obtener un certificado de Let's Encrypt implica resolver un desafío de validación de dominio emitido por un servidor ACME (Automatic Certificate Management Environment). Este desafío verifica su propiedad de los dominios para los que está tratando de obtener un certificado. Existen diferentes tipos de desafíos, siendo el más utilizado HTTP-01. Como su nombre indica, utiliza el protocolo HTTP. Si bien los servidores HTTP se pueden configurar para usar cualquier puerto TCP, este desafío solo funcionará en el puerto 80 debido a medidas de seguridad. DNS-01 es otro tipo de desafío menos popular basado en la resolución de DNS. Tenga en cuenta que los certificados comodín no se pueden obtener a través del desafío HTTP-01. Esta guía se centrará inicialmente en HTTP-01.
Complementos
Certbot se basa en complementos para realizar la autenticación y la instalación. Los complementos como webroot e independiente solo realizan la autenticación, mientras que otros, como los complementos de Apache y Nginx, están diseñados para obtener e instalar certificados automáticamente (es decir, la configuración del servidor web). Otros complementos incluyen varios complementos DNS específicos del proveedor para la autenticación DNS-01. La mayoría de los complementos de certbot se instalan por separado, excepto los complementos webroot e independientes que están integrados.
Instalando Certbot
La mayoría de las distribuciones de Linux proporcionan certbot en sus repositorios oficiales. A continuación se encuentran las instrucciones de instalación para plataformas ampliamente utilizadas.
Debian y Ubuntu:
apt update
apt install -y certbot
yum install -y certbot
Fedora y CentOS 8:
dnf install -y certbot
Arco Linux:
pacman -Sy certbot
FreeBSD:
pkg install py36-certbot
OpenBSD 6.0 y posterior:
pkg_add certbot
MacOS (se requiere homebrew):
brew install letsencrypt
Otro:
Si un paquete de certbot no está disponible para su plataforma, puede usar el script oficial de envoltura automática de certbot para instalar certbot automáticamente en su sistema. Se puede descargar aquí.
Usando Certbot
Listado de certificados
Para mostrar una lista de los certificados administrados por certbot en su servidor, emita el comando:
certbot certificates
Obtención de un certificado para configuración manual
Si elige configurar manualmente su servidor web, puede obtener un certificado de dos maneras. Ya sea dando acceso a certbot al directorio raíz web de su servidor (es decir, el complemento webroot), o implementando un servidor web independiente temporal en el puerto 80 (es decir, el complemento independiente). El último complemento es útil en los casos en que la integración con su servidor web existente es imposible o no se desea. Para mayor comodidad y renovaciones más sencillas, sea coherente con el complemento utilizado.
Uso de un servidor web existente
Para usar su servidor web existente, asegúrese de que se esté ejecutando y escuchando en el puerto 80 antes de ejecutar el siguiente comando
certbot certonly --webroot
Se le pedirá que ingrese, entre otra información, su(s) nombre(s) de dominio y la ruta a su webroot, que es `/var/www/html/` por defecto en la mayoría de los sistemas Linux. Alternativamente, puede especificar la información requerida como argumentos de comando. Por ejemplo:
certbot certonly --webroot --webroot-path /var/www/html --agree-tos -m [email protected] -d www.example.com
Uso del servidor web independiente
Para utilizar el servidor independiente, primero asegúrese de la disponibilidad del puerto 80. Puede comprobar si hay algún proceso vinculado a ese puerto mediante:
ss -lntp 'sport = 80'
Si es necesario, detenga el servicio/proceso infractor antes de continuar. Luego, emita el comando:
certbot certonly --standalone
Una vez que se emite el certificado, deberá configurar su servidor web manualmente. Los archivos relevantes se pueden encontrar en /etc/letsencrypt/live/your_domain.
Instalación interactiva de HTTPS
Como se mencionó anteriormente, certbot puede automatizar todo el proceso de configuración de HTTPS, incluida la configuración del servidor web. Los complementos están disponibles tanto para Apache como para Nginx, y es posible que deban instalarse como un paquete separado. Instale el complemento de certbot específico para su servidor web, luego ejecute `certbot run --PLUGIN_NAME`. Demostraremos todo el proceso para Apache en un sistema Debian 10. El proceso para Nginx es similar.
apt install -y python-certbot-apache certbot run --apache
Suponiendo que su servidor web ya esté configurado para su(s) nombre(s) de dominio, certbot analizará la configuración existente y le pedirá que elija para qué nombre(s) de dominio debe activarse HTTPS. Si su servidor web no está configurado, o si certbot no detecta su(s) nombre(s) de dominio, simplemente ingrese su(s) nombre(s) de dominio manualmente cuando se le solicite. Por ejemplo:
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
Certbot creará un nuevo archivo de configuración de Apache para su nuevo host virtual HTTPS y le preguntará si el tráfico HTTP debe redirigirse a HTTPS. A menos que tenga motivos fundados para no hacerlo, debe habilitar la redirección 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 Enabled Apache rewrite module Redirecting vhost in /etc/apache2/sites-enabled/www.example.com.conf to ssl vhost in /etc/apache2/sites-available/www.example.com-le-ssl.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://www.example.com
Renovación de certificados
Renovación manual
Para renovar sus certificados con certbot, puede usar el subcomando de renovación. Durante la renovación, certbot utilizará los mismos complementos y opciones utilizados para la emisión original. Los certificados solo se renuevan si caducan en menos de 30 días, por lo que este subcomando se puede utilizar con la frecuencia deseada, ya que no realizará ninguna acción si los certificados no están próximos a su fecha de caducidad. El comando es simplemente:
certbot renew
Si se utilizó el complemento independiente para emitir un certificado, deberá detener su servidor web para que la renovación tenga éxito. Puedes lograr eso usando ganchos. Por ejemplo, si el sistema ejecuta Apache, el comando sería:
certbot renew --pre-hook "systemctl stop apache2.service" --post-hook "systemctl start apache2.service"
Renovación automática
Muchas distribuciones han habilitado renovaciones automáticas de forma predeterminada, ya sea a través de temporizadores systemd o trabajos cron. Puede verificar los temporizadores de systemd con:
systemctl list-timers
Y para trabajos cron usando:
ls /etc/cron*
Si se usó el complemento webroot para la emisión, las renovaciones automáticas deberían tener éxito siempre que su servidor web esté funcionando. Sin embargo, con el complemento independiente, el comando de renovación automática predeterminado fallará en caso de que se esté ejecutando un servidor web, ya que certbot no podrá vincularse al puerto 80. Por lo tanto, es necesario modificarlo con la adición de ganchos, como se muestra arriba.
Revocación de certificados
Se puede revocar un certificado especificando la ruta o el nombre del certificado:
certbot revoke --cert-name cert_name (OR) certbot revoke --cert-path /path/to/cert.pem
Por ejemplo:
certbot revoke --cert-name www.example.net
Después de ejecutar el subcomando revocar, certbot preguntará si se deben eliminar los archivos de certificado. Si elige no eliminarlos, el certificado revocado se renovará durante la próxima renovación. Se pueden pasar varias opciones autoexplicativas al subcomando revocar:
- --delete-after-revocate (solicita la elección del usuario de forma predeterminada)
- --no-delete-after-revocate (solicita la elección del usuario de forma predeterminada)
- --motivo [no especificado, compromiso clave, cambio de afiliación, reemplazado, cese de operación] (Predeterminado:no especificado)
Certificados comodín
Se puede usar un solo certificado comodín para identificar varios subdominios, como alternativa a los certificados regulares separados. Para obtener un certificado comodín, se debe utilizar el desafío DNS-01. Si bien hay disponibles varios complementos específicos del proveedor que automatizan el proceso de autenticación ACME, explicaremos el proceso manual e independiente del proveedor. Se necesita acceso a los servidores de nombres para su dominio.
Utilice el siguiente comando para solicitar un certificado comodín:
certbot certonly --manual --preferred-challenges dns-01 -d *.example.net
Certbot mostrará un valor que debe implementarse en un registro DNS TXT. Este registro TXT sirve como la validación de propiedad necesaria.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please deploy a DNS TXT record under the name _acme-challenge.example.net with the following value: y77OkxXi89sJLjUgYu-HReYrcVlxt_bfG8yVOVKngBOcU Before continuing, verify the record is deployed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Press Enter to Continue
Deberá crear el registro especificado en su panel de control de DNS antes de continuar. Una vez que se crea el registro, espere unos minutos antes de presionar Enter, lo que activa el servidor ACME para verificarlo. En algunos casos, es posible que se requiera un tiempo de espera más largo para que el nuevo registro se propague correctamente y sea accesible. En caso de éxito, el certificado, la cadena y la clave privada se guardarán en /etc/letsencrypt/live/example.com/.
Referencias e Información Adicional
- Repositorio oficial de Certbot Github
- Entorno de gestión automática de certificados (ACME) RFC 8555
- Documentación de EFF Certbot
- Página del manual de Certbot(1)