Cómo solicitar un certificado LetsEncrypt usando Acme

Contenidos

Vamos a cifrar

LetsEncrypt cambió el mundo de los certificados SSL cuando su oferta de certificados SSL gratuitos y de corta duración permitió a una gran cantidad de personas y compañías proteger sus aplicaciones web sin costo alguno. Con este servicio, debería existir la infraestructura necesaria y, con ese fin, surgieron una gran cantidad de aplicaciones que se ajustan a las necesidades de emisión de SSL.

Una de las utilidades más habituales es la de CertBot, que puede funcionar bien, pero otra aplicación open source que está habilitada es acme.sh. Este es un cliente ACME (el protocolo utilizado por LetsEncrypt para emitir certificados SSL) absolutamente basado en shell. Con una gran cantidad de funciones avanzadas integradas, este cliente posibilita configuraciones complejas.

La forma más sencilla de instalar [acme.sh](<http://acme.sh>) es el siguiente, que descarga y ejecuta el script desde aquí, https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh.

curl <https://get.acme.sh> | sh

La fuente de ese sitio se encuentra aquí, si desea verificar qué está haciendo el script real

La instalación descargará y moverá los archivos a ~/.acme.she instale un alias en su ~/.bashrc expediente. Al mismo tiempo, se instalará un trabajo cron si está habilitada.

Instalación de Acme.shc

Primeros pasos

Mucho de cómo lo utilizas [acme.sh](<http://acme.sh>) depende del método y la aplicación para los que solicita el certificado. Acme.sh ofrece muchos métodos diferentes para solicitar un certificado, como:

En este post, voy a demostrar dos formas diferentes de solicitar un certificado. Incluyo configuraciones de servidor web para NGINX y Apache, que utiliza el método Webroot. El método del modo DNS utiliza un archivo de configuración para crear registros CNAME que se usan para verificar el dominio, en lugar de crear un archivo en el sistema de archivos.

Configuración del servidor web

Configuración de NGINX LetsEncrypt

NGINX facilita la creación de una configuración compartida para utilizar cuando se utiliza el webroot método de solicitud de un certificado.

letsencrypt.conf

Se recomienda crear una configuración independiente que se pueda incluir según sea necesario en las configuraciones de vhost, así: include /etc/nginx/letsencrypt.conf

# Rule for legitimate ACME Challenge requests (like /.well-known/acme-challenge/xxxxxxxxx)
# We use ^~ here, so that we don't check other regexes (for speed-up). We actually MUST cancel
# other regex checks, because in our other config files have regex rule that denies access to files with dotted names.
location ^~ /.well-known/acme-challenge/ {
    # Set correct content type. According to this:
    # <https://community.letsencrypt.org/t/using-the-webroot-domain-verification-method/1445/29>
    # Current specification requires "text/plain" or no content header at all.
    # It seems that "text/plain" is a safe option.
   default_type "text/plain";
}

# Direct access returns a 404
location = /.well-known/acme-challenge/ {
   return 404;
}

apache

Del mismo modo que NGINX, Apache puede crear un archivo de configuración independiente. A continuación se muestra un ejemplo de esta configuración.

/etc/apache2/conf-available/letsencrypt.conf

Para este caso, la configuración de Apache es específica del host virtual debido a la necesidad de incluir la ubicación del disco. La próxima es una ubicación común, pero puede diferir según su configuración específica.

Alias /.well-known/acme-challenge/ "/var/www/html/.well-known/acme-challenge/"
<Directory "/var/www/html/">
    AllowOverride None
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

Configuración de DNS

En este post, estoy demostrando el modo DNS usando Cloudflare, dado que ofrece cambios de DNS extremadamente rápidos y funciona excepcionalmente bien con este método.

Acme.sh utiliza dos variables ambientales para el dns_cf método: CF_Key y CF_Email. Para incluir esto en su entorno al inicio, puede incluir esta configuración dentro de su .bashrc expediente.

Puede que no sea evidente, pero hay un espacio antes de cada comando de exportación, lo que de forma general garantiza que no se leerán en el historial, por si acaso.

 export CF_Key="#########..."
 export CF_Email="[email protected]"

Emitir certificado a través del método Webroot

Al emitir el siguiente comando, se definen dos dominios en un solo certificado. Esto es para asegurarse de que cuando se solicite cualquiera de los nombres de host (y a menudo se redirija al canónico), la solicitud seguirá protegida por una conexión segura.

acme.sh --issue -d example.com -d www.example.com -w /var/www/html

Los certificados emitidos están en /.acme.sh/acme.sh/{domain_name}

Emitir certificado a través del método DNS

Cuando se utiliza el método de emisión de DNS, un txt El registro se crea a través de la API de Cloudflare y LetsEncrypt verifica el dominio usando ese registro temporal. Este es un método más limpio, dado que no webroot se necesita configuración.

# Multiple Domains
acme.sh --issue --dns dns_cf -d example.com -d www.example.com

Los certificados emitidos están en /.acme.sh/acme.sh/{domain_name}

Certificado renovable

Por defecto, Acme.sh, creará un cronjob como la próxima entrada:

48 0 * * * "/home/user/.acme.sh/acme.sh" --cron --home "/home/user/.acme.sh" > /dev/null

Para forzar una renovación, puede emitir el siguiente comando, que utilizará el mismo método de emisión que se utilizó originalmente:

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

Borrar certificados

Si ya no desea renovar un certificado, es muy fácil de quitar. A pesar de esto, esto no elimina el certificado del disco. Para hacer eso, deberá navegar a ~/.acme.sh/ y elimine el directorio que contiene los certificados.

acme.sh --remove -d example.com -d www.example.com

Esto posibilita limpiar los certificados que están configurados para la renovación, que puede verificar enumerando los certificados de la próxima manera:

acme.sh --list

Conclusión

LetsEncrypt ofrece un servicio excelente y fácil de utilizar para el aprovisionamiento de certificados SSL para su uso en sitios web. Crear un portal web seguro es más fácil que nunca y utilizar el acme.sh cliente significa que tiene control total acerca de cómo ocurre esto en su servidor web.

Con bastantes métodos diferentes para obtener un certificado, inclusive los métodos muy seguros, como un dominio delegado, posibilitan recuperar correctamente los certificados necesarios.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.