SSL, Let's Encrypt · 7 min read · Feb 04, 2026

Introducción a acme.sh cliente SSL de Let's Encrypt

Acme.sh es un cliente del protocolo ACME simple, poderoso y fácil de usar, escrito puramente en lenguaje Shell (Unix shell), compatible con los shells bash, dash y sh. Ayuda a gestionar la instalación, renovación y revocación de certificados SSL. Soporta los protocolos ACME versión 1 y ACME versión 2, así como certificados comodín ACME v2. Ser un cliente ACME sin dependencias lo hace aún mejor. No necesitas descargar e instalar toda la internet para hacerlo funcionar. La herramienta no requiere acceso root o sudo, pero se recomienda usar root.

Acme.sh soporta los siguientes métodos de validación que puedes usar para confirmar la propiedad del dominio:

  • Modo webroot
  • Modo standalone
  • Modo standalone tls-alpn
  • Modo Apache
  • Modo Nginx
  • Modo DNS
  • Modo alias DNS
  • Modo sin estado

¿Qué es Let’s Encrypt?

Let’s Encrypt (LE) es una autoridad de certificación (CA) que ofrece certificados SSL/TLS gratuitos y automatizados, con el objetivo de cifrar toda la web. Si posees un nombre de dominio y tienes acceso shell a tu servidor, puedes utilizar Let’s Encrypt para obtener un certificado de confianza sin costo. Let’s Encrypt puede emitir certificados SAN para hasta 100 nombres de host ** y certificados comodín. Todos los certificados son válidos por un período de 90 días.

Uso de acme.sh y comandos básicos

En esta sección, mostraré algunos de los comandos y opciones más comunes de acme.sh.

Instalación de acme.sh

Tienes algunas opciones para instalar acme.sh.

Instalar desde la web a través de curl o wget:

curl https://get.acme.sh | sh  
source ~/.bashrc

o

wget -O - https://get.acme.sh | sh  
source ~/.bashrc

Instalar desde GitHub:

curl https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh | INSTALLONLINE=1 sh

o

wget -O - https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh | INSTALLONLINE=1 sh

Clonar Git e instalar:

git clone https://github.com/Neilpang/acme.sh.git  
cd ./acme.sh  
./acme.sh --install  
source ~/.bashrc

El instalador realizará 3 acciones:

  1. Crear y copiar acme.sh a tu directorio personal ( $HOME): ~/.acme.sh/. Todos los certificados también se colocarán en esta carpeta.
  2. Crear un alias para: acme.sh=~/.acme.sh/acme.sh.
  3. Crear un trabajo cron diario para verificar y renovar los certificados si es necesario.

Instalación avanzada:

git clone https://github.com/Neilpang/acme.sh.git  
cd acme.sh  
./acme.sh --install \  
          --home ~/myacme \  
          --config-home ~/myacme/data \  
          --cert-home ~/mycerts \  
          --accountemail "[email protected]" \  
          --accountkey ~/myaccount.key \  
          --accountconf ~/myaccount.conf \  
          --useragent "este es mi cliente."

No necesitas establecer todas las opciones, solo establece aquellas que te interesan.

Opciones explicadas:

  • --home es un directorio personalizado para instalar acme.sh. Por defecto, se instala en ~/.acme.sh.
  • --config-home es una carpeta escribible, acme.sh escribirá todos los archivos (incluyendo certificados/claves, configuraciones) allí. Por defecto, está en --home.
  • --cert-home es un directorio personalizado para guardar los certificados que emites. Por defecto, se guarda en --config-home.
  • --accountemail es el correo electrónico utilizado para registrar la cuenta en Let’s Encrypt, aquí recibirás el correo de aviso de renovación. El valor por defecto está vacío.
  • --accountkey es el archivo que guarda tu clave privada de cuenta. Por defecto, se guarda en --config-home.
  • --useragent es el valor del encabezado user-agent utilizado para enviar a Let’s Encrypt.

Después de que la instalación esté completa, puedes verificarlo comprobando la versión de acme.sh:

acme.sh --version  
# v2.8.1

El programa tiene muchos comandos y parámetros que se pueden usar. Para obtener ayuda, puedes ejecutar:

acme.sh --help

Emitir un certificado SSL

Si ya tienes un servidor web en funcionamiento, deberías usar modo webroot. Necesitarás acceso de escritura a la carpeta raíz web. Aquí hay algunos comandos de ejemplo que se pueden usar para obtener un certificado a través del modo webroot:

Dominio único + Modo webroot:

acme.sh --issue -d example.com --webroot /var/www/example.com  

Múltiples dominios en el mismo certificado + Modo webroot:

acme.sh --issue -d example.com -d www.example.com -d mail.example.com --webroot /var/www/example.com

Certificado ECC/ECDSA de dominio único + Modo webroot:

acme.sh --issue -d example.com --webroot /var/www/example.com --keylength ec-256

Múltiples dominios en el mismo certificado ECC/ECDSA + Modo webroot:

acme.sh --issue -d example.com -d www.example.com -d mail.example.com --webroot /var/www/example.com --keylength ec-256

Los valores válidos para --keylength son: 2048 (predeterminado), 3072, 4096, 8192 o ec-256, ec-384.

Si no tienes un servidor web, tal vez estés en un servidor SMTP o FTP, el puerto 80 está libre, entonces puedes usar modo standalone. Si deseas usar este modo, primero necesitarás instalar las herramientas socat.

Dominio único + Modo standalone:

acme.sh --issue -d example.com --standalone  

Múltiples dominios en el mismo certificado + Modo standalone:

acme.sh --issue -d example.com -d www.example.com -d mail.example.com --standalone  

Si no tienes un servidor web, tal vez estés en un servidor SMTP o FTP, el puerto 443 está libre. Puedes usar el modo standalone TLS ALPN. Acme.sh tiene un servidor web TLS standalone incorporado, puede escuchar en el puerto 443 para emitir el certificado.

Dominio único + Modo Standalone TLS ALPN:

acme.sh --issue -d example.com --alpn

Múltiples dominios en el mismo certificado + Modo Standalone TLS ALPN:

acme.sh --issue -d example.com -d www.example.com --alpn

Integración automática de API DNS

Si tu proveedor de DNS tiene una API, acme.sh puede usar la API para agregar automáticamente el registro DNS TXT por ti. Tu certificado será emitido y renovado automáticamente. No se requiere trabajo manual. Antes de solicitar los certificados, configura tus claves API y correo electrónico. Actualmente, acme.sh tiene integración automática de DNS con alrededor de 60 proveedores de DNS de forma nativa y puede utilizar la herramienta Lexicon para aquellos que no son compatibles de forma nativa.

Dominio único + Modo API DNS de CloudFlare:

export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"  
export CF_Email="[email protected]"  
acme.sh --issue -d example.com --dns dns_cf  

Certificado comodín + Modo API DNS de CloudFlare:

export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"  
export CF_Email="[email protected]"  
acme.sh --issue -d example.com -d '*.example.com' --dns dns_cf

Si tu proveedor de DNS no soporta ningún acceso API, puedes agregar el registro TXT manualmente.

acme.sh --issue --dns -d example.com -d www.example.com -d cp.example.com  

Deberías obtener una salida como la siguiente:

Agrega el siguiente registro txt:
Dominio:_acme-challenge.example.com
Valor txt:9ihDbjYfTExAYeDs4DBUeuTo18KBzwvTEjUnSwd32-c

Agrega el siguiente registro txt:
Dominio:_acme-challenge.www.example.com
Valor txt:9ihDbjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Por favor, agrega esos registros txt a los dominios. Esperando a que el DNS surta efecto.

Luego simplemente vuelve a ejecutar con el argumento renew:

acme.sh --renew -d example.com

Ten en cuenta que este es el modo manual de DNS y no puedes renovar automáticamente tus certificados. Tendrás que agregar un nuevo registro TXT a tu dominio manualmente cuando sea el momento de renovar los certificados. Así que usa el modo API DNS en su lugar, porque puede ser automatizado.

Instalar el certificado SSL de Let’s Encrypt

Después de que se generen los certificados, probablemente querrás instalar/copiar los certificados emitidos a la ubicación correcta en el disco. Debes usar este comando para copiar los certificados a los archivos de destino, no uses los archivos de certificados en la carpeta ~/.acme.sh/, son solo para uso interno, la estructura de carpetas puede cambiar en el futuro. Antes de la instalación, crea un directorio sensato para almacenar tus certificados. Eso puede ser /etc/letsencrypt, /etc/nginx/ssl o /etc/apache2/ssl, por ejemplo, dependiendo de tu software de servidor web y tus propias preferencias para almacenar cosas relacionadas con SSL.

Ejemplo de Apache:

acme.sh --install-cert \  
        --domain example.com \   
        --cert-file /path/to/cert/cert.pem \  
        --key-file /path/to/keyfile/key.pem \  
        --fullchain-file /path/to/fullchain/fullchain.pem \  
        --reloadcmd "sudo systemctl reload apache2.service"

Ejemplo de Nginx:

acme.sh --install-cert \  
        --domain example.com \   
        --cert-file /path/to/cert/cert.pem \  
        --key-file /path/to/keyfile/key.pem \  
        --fullchain-file /path/to/fullchain/fullchain.pem \  
        --reloadcmd "sudo systemctl reload nginx.service"

Los parámetros se almacenan en el archivo de configuración .acme.sh, por lo que necesitas configurarlo correctamente para tu sistema, ya que este archivo se lee cuando el trabajo cron ejecuta la renovación. “reloadcmd” depende de tu sistema operativo y sistema de inicio.

Renovar los certificados SSL de Let’s Encrypt

No necesitas renovar los certificados manualmente. Todos los certificados se renovarán automáticamente cada 60 días.

Sin embargo, también puedes forzar la renovación de un certificado:

acme.sh --renew -d example.com --force

o, para el certificado ECC:

acme.sh --renew -d example.com --force --ecc

Cómo actualizar acme.sh

Puedes actualizar acme.sh al código más reciente con:

acme.sh --upgrade

También puedes habilitar la actualización automática:

acme.sh --upgrade --auto-upgrade

Entonces acme.sh se mantendrá actualizado automáticamente.

Eso es todo. Si te quedas atascado en algo, visita la página wiki de acme.sh en https://github.com/Neilpang/acme.sh/wiki.

Enlaces

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.