El certificado SSL permite que tu web se abra por el protocolo seguro HTTPS. Así los datos entre el visitante y el servidor viajan cifrados, y el navegador muestra un candado junto a la dirección en lugar del aviso «No seguro».
Let's Encrypt emite estos certificados gratis, y el programa Certbot los obtiene, los conecta por sí solo a Nginx o Apache y después los renueva también por sí solo. Hemos probado todos los comandos de abajo en Debian 12, y en Ubuntu funcionan igual.
Qué necesitas antes de empezar
- Un dominio cuyo registro A apunte a la dirección IP del servidor. Puedes comprobarlo con el comando
getent hosts example.com, que debe mostrar la IP de tu servidor. - La web ya se abre en
http://tu-dominiocon Nginx o Apache. Cómo configurar Nginx lo contamos en un artículo aparte. - El puerto 80 abierto, ya que Let's Encrypt verifica el dominio precisamente a través de él. Si tienes activado el cortafuegos, abre los puertos 80 y 443 como se muestra en el artículo sobre el cortafuegos.
Si el dominio tiene un registro AAAA
Let's Encrypt verifica primero el dominio por IPv6. Si el registro AAAA apunta a otro servidor o la web no está configurada para IPv6, la verificación fallará. Pon en el registro AAAA la dirección IPv6 de este servidor o elimínalo.
1. Instala Certbot
# Instalamos Certbot y su módulo para Nginx
apt update && apt install -y certbot python3-certbot-nginx# Instalamos Certbot y su módulo para Apache
apt update && apt install -y certbot python3-certbot-apache2. Emite el certificado
Un solo comando obtiene el certificado, lo conecta a la web y activa la redirección de http:// a https://. Con -d indica todas las direcciones de la web, normalmente el dominio con www y sin él.
certbot --nginx -d example.com -d www.example.com
Certificado emitido y conectado a Nginx
certbot --apache -d example.com -d www.example.com
Certificado emitido y conectado a Apache
La primera vez que lo ejecutes, Certbot te hará algunas preguntas:
- Correo electrónico – ahí te llegarán los avisos importantes sobre la cuenta.
- Condiciones de Let's Encrypt – escribe
Ypara aceptarlas. - Boletín de la EFF – es opcional, puedes responder
N.
Si al final aparece Congratulations! You have successfully enabled HTTPS, ya está todo listo. Abre la web en https://tu-dominio, y junto a la dirección aparecerá el candado.
Certbot ha añadido por sí solo las líneas necesarias a la configuración de la web, y están marcadas con el comentario # managed by Certbot. En Nginx es el archivo de la web en /etc/nginx/sites-available.
En Apache aparecerá, junto a tu archivo, uno nuevo terminado en -le-ssl.conf.
3. Comprueba el certificado
# Mostramos todos los certificados del servidor
certbot certificates
Al certificado le quedan 89 días de validez
En la línea Expiry Date se ve la fecha de caducidad.
Entre paréntesis, VALID indica cuántos días más será válido el certificado.
Debajo están las rutas a los archivos del certificado y de la clave, por si los necesitas para otros programas.
4. Asegúrate de que la renovación funciona
Los certificados de Let's Encrypt se emiten por poco tiempo. Ahora son 90 días, y de aquí a 2028 Let's Encrypt irá reduciendo el plazo hasta los 45 días. No tienes que renovar nada a mano. Certbot revisa los certificados dos veces al día y renueva por sí solo los que están a punto de caducar.
Comprueba que la renovación funcionará con una ejecución de prueba. No cambia nada en el servidor.
# Renovación de prueba de todos los certificados
certbot renew --dry-run
La renovación de prueba ha salido bien
Si al final aparece Congratulations, all simulated renewals succeeded, el certificado se renovará solo.
Varios dominios en un mismo servidor
Ejecuta Certbot por separado para cada web, indicando sus dominios. Para añadir una dirección nueva a un certificado ya emitido, indica todas las direcciones antiguas más la nueva y añade la opción --expand.
# Añadimos el subdominio shop al certificado de example.com
certbot --nginx --expand -d example.com -d www.example.com -d shop.example.comLímites de Let's Encrypt
Un mismo conjunto de dominios se puede emitir como máximo 5 veces en 7 días.
Se permiten como máximo 5 verificaciones fallidas por hora para un mismo dominio.
Por eso, si algo no sale bien, busca primero la causa en la sección de abajo y solo después vuelve a ejecutar Certbot.
Obtener un certificado sin tocar la configuración del servidor
Si quieres conectar el certificado a mano o lo necesita otro programa, usa certonly. Certbot solo obtendrá el certificado y no cambiará nada en la configuración.
# Certbot pasa la verificación por sí solo a través del servidor web en marcha.
# Para Apache, sustituye --nginx por --apache
certbot certonly --nginx -d example.com# Sirve para cualquier servidor web. Indica en -w la carpeta
# desde la que la web sirve sus archivos
certbot certonly --webroot -w /var/www/example.com -d example.com# Certbot ocupará por sí solo el puerto 80 durante un momento. Si en él
# funciona un servidor web, detenlo primero
certbot certonly --standalone -d example.comLos archivos listos están en la carpeta /etc/letsencrypt/live/example.com/. El archivo fullchain.pem es el certificado.
El archivo privkey.pem es la clave privada, y no debes pasársela a nadie.
Errores frecuentes
Timeout during connect (likely firewall problem)
Let's Encrypt no ha podido conectarse al servidor por el puerto 80. Casi siempre lo bloquea el cortafuegos. Abre los puertos 80 y 443 y vuelve a ejecutar Certbot. Para comprobar si el servidor web escucha en el puerto 80, usa el comando ss -tlnp | grep ':80 '.
DNS problem: NXDOMAIN looking up A
El dominio no tiene registro A. Añádelo en tu registrador de dominios con la dirección IP del servidor. Un registro nuevo no empieza a funcionar al instante, y a veces hay que esperar un poco. Comprueba el resultado con el comando getent hosts example.com y solo después ejecuta Certbot.
unauthorized: Invalid response … 404
Let's Encrypt ha abierto el dominio, pero no ha encontrado el archivo de verificación. Normalmente el dominio apunta a otro servidor, por ejemplo porque el registro A se quedó del hosting anterior o el registro AAAA apunta a otro sitio. Compara la IP del DNS con la IP de tu servidor. Si usas --webroot, comprueba que en -w está la carpeta desde la que la web sirve sus archivos.
Could not automatically find a matching server block
El certificado se ha obtenido, pero Certbot no ha encontrado en la configuración de Nginx ninguna web con ese dominio. Añade el dominio a la directiva server_name de la configuración de la web, compruébala con el comando nginx -t, recarga Nginx y conecta el certificado ya emitido con el comando certbot install --cert-name example.com.
too many certificates o too many failed authorizations
Se han alcanzado los límites de Let's Encrypt, y hay que esperar a que se restablezcan.
El límite de verificaciones fallidas dura una hora.
El límite de reemisión dura una semana.
Para depurar la configuración con calma, ejecuta Certbot con la opción --dry-run, porque las ejecuciones de prueba no cuentan para los límites reales.
El certificado ha caducado y no se ha renovado solo
Renuévalo a mano con el comando certbot renew y mira si aparecen errores. Lo más habitual es que se trate de uno de los problemas de arriba, por ejemplo el puerto 80 cerrado. Para comprobar que el temporizador de renovación está activado, usa el comando systemctl list-timers | grep certbot.
Los detalles de las últimas ejecuciones se guardan en el archivo /var/log/letsencrypt/letsencrypt.log.
¿Se puede obtener un certificado para todos los subdominios a la vez?
Sí, es un certificado wildcard del tipo *.example.com. Pero en ese caso Let's Encrypt verifica el dominio mediante un registro DNS y no a través de la web, así que los métodos de este artículo no sirven. Normalmente es más sencillo emitir el certificado para los subdominios que necesitas con varias opciones -d.
Nuestros recursos
Canal de Telegram: https://t.me/f3cloud_news
Web del hosting: https://f3cloud.com