Primeros pasos con acme.sh Cliente SSL de Let’s Encrypt

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

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

  • Modo Webroot
  • Modo autónomo
  • Modo autónomo tls-alpn
  • Modo Apache
  • Modo Nginx
  • Modo DNS
  • Modo DNS alias
  • 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 eres propietario de un nombre de dominio y tienes acceso shell a tu servidor, puedes utilizar Let’s Encrypt para obtener un certificado de confianza sin coste alguno. Let’s Encrypt puede emitir certificados SAN para hasta 100 nombres de host y certificados comodín. Todos los certificados son válidos durante 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 varias opciones para instalar acme.sh.

Instalardesde 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

Instalardesde 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 e instalar desde Git:

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

El instalador realizará 3 acciones:

  1. Crea y copia acme.sh en tu directorio de inicio ($HOME): ~/.acme.sh/. Todos los certificados se colocarán también en esta carpeta.
  2. Crea alias para: acme.sh=~/.acme.sh/acme.sh.
  3. Crea una tarea cron diaria para comprobar 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 "this is my client."

No necesitas configurar todas las opciones, sólo las que te interesen.

Opciones explicadas:

  • --home es un directorio personalizado en el que instalar acme.sh. Por defecto, se instala en ~/.acme.sh.
  • --config-home es una carpeta en la que se puede escribir, acme.sh escribirá allí todos los archivos (incluidos cert/keys, configs). Por defecto, se instala en --home.
  • --cert-home es un directorio personalizado para guardar los certificados que emitas. 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. Por defecto está vacío.
  • --accountkey es el archivo que guarda la clave privada de tu cuenta. Por defecto se guarda en --config-home.
  • --useragent es el valor de la cabecera user-agent que se utiliza para enviar a Let’s Encrypt.

Una vez completada la instalación, puedes verificarla comprobando la versión acme.sh :

acme.sh --version
# v2.8.1

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

acme.sh --help

Emitir un certificado SSL

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

Un solo dominio + modo webroot:

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

Varios dominios en el mismo cert + 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 certECC/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 (por defecto), 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 utilizar el modo autónomo. Si quieres utilizar este modo, tendrás que instalar primero las herramientas socat.

Dominio único + modo autónomo:

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

Varios dominios en el mismo cert+ Modo autónomo:

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 443está libre. Puedes utilizar el modo autónomo TLS ALPN. Acme.sh tiene un servidor web TLS autónomo incorporado, que puede escuchar en el puerto 443 para emitir el certificado.

Dominio único + modo autónomo TLS ALPN:

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

Múltiples dominios en el mismo cert + Modo autónomo TLS ALPN:

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

Integración automática de la API DNS

Si tu proveedor de DNS tiene una API, acme.sh puede utilizarla para añadir automáticamente el registro DNS TXT por ti. Tu certificado se emitirá y renovará automáticamente. No es necesario realizar ningún trabajo manual. Antes de solicitar los certificados,configura tus claves API y tu correo electrónico. Actualmente acme.sh tiene integración DNS automática con alrededor de 60 proveedores DNS de forma nativa y puede utilizar la herramienta Lexicon para aquellos que no son compatibles de forma nativa.

Dominio único + CloudFlare DNS modo API:

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 admite ningún acceso API, puedes añadir el registro TXT manualmente.

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

Deberías obtener un resultado como el siguiente:

Add the following txt record:
Domain:_acme-challenge.example.com
Txt value:9ihDbjYfTExAYeDs4DBUeuTo18KBzwvTEjUnSwd32-c

Add the following txt record:
Domain:_acme-challenge.www.example.com
Txt value:9ihDbjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Please add those txt records to the domains. Waiting for the dns to take effect.

A continuación, vuelve a ejecutar con renew argumento:

acme.sh --renew -d example.com

Ten en cuenta que éste es el modo manual de DNS y que no puedes renovar automáticamente tus certificados. Tendrás que añadir un nuevo registro TXT a tu dominio manualmente cuando llegue el momento de renovar los certificados. Así que utiliza en su lugar el modo DNS API, porque se puede automatizar.

Instalar el certificado SSL Let’s encrypt

Una vez generados los certificados, probablemente querrás instalar/copiar los certificados emitidos en la ubicación correcta del disco. Debes utilizar este comando para copiar los certs a los archivos de destino, no utilices los archivos certs de la carpeta ~/.acme.sh/, son sólo 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. Puede ser /etc/letsencrypt, /etc/nginx/ssl o /etc/apache2/ssl por ejemplo, dependiendo del software de tu servidor web y de tus propias preferencias para almacenar cosas relacionadas con SSL.

Apache ejemplo:

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"

EjemploNginx:

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 debes configurarlo correctamente para tu sistema, ya que este archivo se lee cuando la tarea cron ejecuta la renovación. «reloadcmd» depende de tu sistema operativo y de tu sistema init.

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 cert:

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

o, para un cert ECC:

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

Cómo actualizar acme.sh

Puedes actualizar acme.sh al último código con:

acme.sh --upgrade

También puedes activar 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

También te podría gustar...