Instalar un certificado SSL para subdominios wildcard con certbot

Normalmente utilizo Laravel Forge para la gestión de mis servidores y todo lo relativo a SSL. Sin embargo, para los certificados SSL solamente soportan 5 proveedores si quieres utilizar certificados wildcard con Let's Encrypt, y nuestro proyecto tenía las DNS en Vercel.

Tras cacharrear un poco, encontré certbot-dns-multi, una extensión de Certbot que te permite conectarlo con los siguientes 127 proveedores (al momento de escribir este artículo):

  • Akamai EdgeDNS
  • Alibaba Cloud DNS
  • all-inkl
  • Amazon Lightsail
  • Amazon Route 53
  • ArvanCloud
  • Aurora DNS
  • Autodns
  • Azure (deprecated)
  • Azure DNS
  • Bindman
  • Bluecat
  • Brandit
  • Bunny
  • Checkdomain
  • Civo
  • Cloud.ru
  • CloudDNS
  • Cloudflare
  • ClouDNS
  • CloudXNS
  • ConoHa
  • Constellix
  • Derak Cloud
  • deSEC.io
  • Designate DNSaaS for Openstack
  • Digital Ocean
  • DNS Made Easy
  • dnsHome.de
  • DNSimple
  • DNSPod (deprecated)
  • Domain Offensive (do.de)
  • Domeneshop
  • DreamHost
  • Duck DNS
  • Dyn
  • Dynu
  • EasyDNS
  • Efficient IP
  • Epik
  • Exoscale
  • External program
  • freemyip.com
  • G-Core
  • Gandi
  • Gandi Live DNS (v5)
  • Glesys
  • Go Daddy
  • Google Cloud
  • Google Domains
  • Hetzner
  • Hosting.de
  • Hosttech
  • HTTP request
  • http.net
  • Hurricane Electric DNS
  • HyperOne
  • IBM Cloud (SoftLayer)
  • IIJ DNS Platform Service
  • Infoblox
  • Infomaniak
  • Internet Initiative Japan
  • Internet.bs
  • INWX
  • Ionos
  • IPv64
  • iwantmyname
  • Joker
  • Joohoi's ACME-DNS
  • Liara
  • Linode (v4)
  • Liquid Web
  • Loopia
  • LuaDNS
  • Manual
  • Metaname
  • MyDNS.jp
  • MythicBeasts
  • Name.com
  • Namecheap
  • Namesilo
  • NearlyFreeSpeech.NET
  • Netcup
  • Netlify
  • Nicmanager
  • NIFCloud
  • Njalla
  • Nodion
  • NS1
  • Open Telekom Cloud
  • Oracle Cloud
  • OVH
  • plesk.com
  • Porkbun
  • PowerDNS
  • Rackspace
  • RcodeZero
  • reg.ru
  • RFC2136
  • RimuHosting
  • Sakura Cloud
  • Scaleway
  • Selectel
  • Servercow
  • Simply.com
  • Sonic
  • Stackpath
  • Tencent Cloud DNS
  • TransIP
  • UKFast SafeDNS
  • Ultradns
  • Variomedia
  • VegaDNS
  • Vercel
  • Versio.[nl|eu|uk]
  • VinylDNS
  • VK Cloud
  • Vscale
  • Vultr
  • Webnames
  • Websupport
  • WEDOS
  • Yandex 360
  • Yandex Cloud
  • Yandex PDD
  • Zone.ee
  • Zonomi

Para usarlo, simplemente tuve que seguir los siguientes pasos:

Primer paso: Instalar snapd

sudo apt update
sudo apt upgrade

sudo apt install snapd

# asegurarse de que está actualizado
sudo snap install core; sudo snap refresh core

Una vez instalado snapd, podemos instalar Certbot:

Segundo paso: instalar Certbot

Certbot es el software de Let's Encrypt para gestionar los certificados SSL gratuitos en nuestros servidores.

sudo snap install --classic certbot

sudo ln -s /snap/bin/certbot /usr/bin/certbot

Tercer paso: instalar dns multi

sudo snap install certbot-dns-multi
sudo snap set certbot trust-plugin-with-root=ok
sudo snap connect certbot:plugin certbot-dns-multi

Una vez la extensión está instalada, tenemos que elegir el proveedor al que queremos conectarnos de la lista superior, y configurar su uso. Para ello, nos vamos a https://go-acme.github.io/lego/dns/ y buscamos nuestro proveedor, en mi caso Vercel.

Creamos un fichero /etc/letsencrypt/vercel.ini con el siguiente contenido:

VERCEL_API_TOKEN=xxxxxx # cambiar por tu token
dns_multi_provider=vercel

Guardamos el fichero y lo securizamos:

chmod 0600 /etc/letsencrypt/vercel.ini

Ahora ya podemos configurar nuestros certificados SSL usando Vercel o cualquier otro proveedor:

certbot certonly -a dns-multi \
  --dns-multi-credentials=/etc/letsencrypt/vercel.ini \
  -d "*.example.com" \
  --dry-run

El parámetro --dry-run va a simular la instalación del certificado pero sin instalarlo, así que puedes ejecutarlo sin problemas cambiando *.example.com por tu dominio.