Cómo Instalar y Renovar Certificados Let’s Encrypt en un Servidor de Alibaba Cloud

Let’s Encrypt es una autoridad certificadora (CA) gratuita, automatizada y abierta, cuyo objetivo es mejorar la seguridad de Internet proporcionando certificados SSL/TLS gratuitos. Este artículo explica en detalle cómo instalar certificados Let’s Encrypt en un servidor de Alibaba Cloud y cómo usar la herramienta Certbot para la renovación automática de certificados.

Preparación Antes de la Instalación

Antes de comenzar a instalar los certificados Let’s Encrypt, asegúrate de que tu servidor ya tenga instalado Nginx y que tu dominio esté apuntando a la dirección IP del servidor. Si tu servidor usa el sistema Alibaba Cloud Linux, puedes instalar Nginx con los siguientes comandos:

Terminal window
1
sudo yum install nginx -y
2
sudo systemctl start nginx
3
sudo systemctl enable nginx

Instalación de Certbot

Certbot es una herramienta cliente automatizada desarrollada por EFF, utilizada para obtener e instalar certificados de Let’s Encrypt. Necesitamos usar el comando yum para instalar Certbot y sus componentes relacionados.

  1. Agregar el repositorio EPEL:
Terminal window
1
sudo yum install epel-release -y
2
3
# Si el comando anterior da error, primero elimina epel-aliyuncs-release y vuelve a instalar epel-release
4
sudo yum remove epel-aliyuncs-release -y
5
sudo yum install epel-release -y
  1. Instalar Certbot y el plugin de Nginx:
Terminal window
1
sudo yum install certbot python3-certbot-nginx -y

Obtener e Instalar Certificados

Una vez instalado Certbot, puedes usar el siguiente comando para emitir certificados para todos los subdominios, reemplazando example.com con tu dominio real:

Terminal window
1
sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com

Este comando te hará una serie de preguntas y generará un registro TXT que necesitarás añadir a tu servidor DNS, como se muestra en la imagen: txtdns

Ve a la sección de DNS en Alibaba Cloud y añade un registro TXT con los valores proporcionados, como se muestra en la siguiente imagen: addtxtdns

Verifica que el registro DNS TXT sea correcto y luego presiona Enter en la terminal: txtdnscheck

Una vez completado Certbot, tus archivos de certificado y clave estarán generalmente en el directorio /etc/letsencrypt/live/tu-dominio/.

Edita el archivo de configuración de Nginx para usar el nuevo certificado SSL, generalmente ubicado en el directorio /etc/nginx/conf.d/.

Terminal window
1
sudo vim /etc/nginx/conf.d/www.conf

Añade el siguiente código, reemplazando tu-dominio con tu propio dominio:

Terminal window
1
server {
2
listen 80;
3
server_name tu-dominio.com *.tu-dominio.com;
4
5
# Redirigir a HTTPS
6
return 301 https://$host$request_uri;
7
}
8
9
server {
10
listen 443 ssl;
11
server_name tu-dominio.com *.tu-dominio.com;
12
13
ssl_certificate /etc/letsencrypt/live/tu-dominio.com/fullchain.pem;
14
ssl_certificate_key /etc/letsencrypt/live/tu-dominio.com/privkey.pem;
15
16
ssl_protocols TLSv1.2 TLSv1.3;
17
ssl_ciphers HIGH:!aNULL:!MD5;
18
19
# Otras configuraciones de Nginx, como el directorio raíz, archivos de índice, etc.
20
root /var/www/html;
21
index index.html;
22
23
location / {
24
try_files $uri $uri/ =404;
25
}
26
}

Recarga Nginx con el siguiente comando:

Terminal window
1
sudo systemctl reload nginx

Configurar la Renovación Automática

Los certificados de Let’s Encrypt son válidos por 90 días, por lo que necesitamos configurar la renovación automática para asegurarnos de que los certificados sean siempre válidos. Certbot proporciona una tarea cron que puede verificar y renovar automáticamente los certificados que están por expirar.

Prueba la renovación del certificado con el siguiente comando:

Terminal window
1
sudo certbot renew --dry-run

Si encuentras un error, es porque Certbot usa el método de DNS para solicitar certificados, por lo que durante la renovación es necesario actualizar el registro DNS. Podemos usar el script [certbot-dns-aliyun] para llamar automáticamente a la API de Alibaba Cloud y lograr la solicitud y renovación automática de certificados.

Instalar la Herramienta de CLI de Aliyun:

Terminal window
1
wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz
2
tar xzvf aliyun-cli-linux-latest-amd64.tgz
3
sudo cp aliyun /usr/local/bin
4
rm -rf aliyun

Configurar el Usuario

Inicia sesión en https://ram.console.aliyun.com/, añade un usuario, habilita el acceso a la llamada OpenAPI y otorga autorización AliyunDNSFullAccess. Registra el AccessKeyID y AccessKeySecret, y en el servidor ejecuta el siguiente código:

Terminal window
1
sudo aliyun configure

Sigue las instrucciones e ingresa la información correspondiente:

Terminal window
1
Access Key Id []: AccessKeyID
2
Access Key Secret []: AccessKeySecret
3
Default Region Id []: cn-beijing
4
Default Output Format [json]: json (Only support json)
5
Default Language [zh|en] en: zh

Si tiene éxito, verás:

Terminal window
1
Configure Done!!!
2
..............888888888888888888888 ........=8888888888888888888D=..............
3
...........88888888888888888888888 ..........D8888888888888888888888I...........
4
.........,8888888888888ZI: ...........................=Z88D8888888888D..........
5
.........+88888888 ..........................................88888888D..........
6
.........+88888888 .......Welcome to use Alibaba Cloud.......O8888888D..........
7
.........+88888888 ............. ************* ..............O8888888D..........
8
.........+88888888 .... Command Line Interface(Reloaded) ....O8888888D..........
9
.........+88888888...........................................88888888D..........
10
..........D888888888888DO+. ..........................?ND888888888888D..........
11
...........O8888888888888888888888...........D8888888888888888888888=...........
12
............ .:D8888888888888888888.........78888888888888888888O ..............

Si hay algún error, verifica si has habilitado el acceso a la llamada OpenAPI y otorgado autorización AliyunDNSFullAccess.

Instalar cerbot-dns-aliyun

Terminal window
1
wget https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh
2
sudo cp alidns.sh /usr/local/bin
3
sudo chmod +x /usr/local/bin/alidns.sh
4
sudo ln -s /usr/local/bin/alidns.sh /usr/local/bin/alidns
5
rm alidns.sh

Si https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh no se puede descargar, descárgalo localmente y súbelo al servidor.

Renovación

Terminal window
1
# Prueba de solicitud
2
certbot certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run
3
4
# Prueba de renovación
5
certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run
6
7
# Para la solicitud y renovación reales, elimina el parámetro --dry-run

Configurar una Tarea Programada para la Renovación Automática

Terminal window
1
crontab -e

Ingresa el siguiente contenido:

Terminal window
1
0 2 1 */1 * root certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --deploy-hook "nginx -s reload"

Esta tarea se ejecutará el día 1 de cada mes a las 2:00 AM, usando el modo manual para renovar el certificado, y recargará Nginx después de una renovación exitosa para aplicar el nuevo certificado. En Crontab, el formato de la tarea programada consta de cinco asteriscos que representan minutos (0 – 59), horas (0 – 23), días del mes (1 – 31), meses (1 – 12) y días de la semana (0 – 7, donde 0 y 7 ambos representan el domingo).

Conclusión

Este artículo explica en detalle cómo instalar certificados Let’s Encrypt en un servidor, usar la herramienta Certbot para obtener e instalar certificados, y configurar la renovación automática. Con estos pasos, puedes asegurarte de que tu servidor siempre use certificados SSL/TLS válidos, mejorando la seguridad de tu sitio web.