Ja fa una eternitat que no escric cap entrada en aquest blog i no pas perquè no tinga coses que contar sinó simplement perquè el temps escasseja.
En aquesta entrada vos compartisc la forma d’automatitzar el procés de creació/renovació d’un certificat “wildcard” per al proveïdor Namecheap.
Podeu consultar l’article anterior on s’explica com demanar un certificat wildcard:
Es requereix tenir instal·lat el pàquet certbot, així si no el tenim, podem indicar la següent ordre al terminal: sudo apt install certbot
.
Heu de tindre en compte que per a utilitzar aquest mètode heu de tindre accés a l’API de Namecheap. En aquest article (en anglès) s’explica com aconseguir l’accés a l’API i també es comparteix un dels scripts que necessitarem per a fer la nostra automatització.
- Primer de tot, ens descarregarem l’script escrit en python d’aquest enllaç. Podeu desar el fitxer de l’script a la carpeta:
/etc/letsencrypt/
. Necessitarem instal·lar la biblioteca PyNamecheap, així executarem al terminal:pip3 install PyNamecheap
o alternativamentsudo apt install python3-namecheap
. - Després hem d’editar l’scrip amb les nostres dades de l’API (username, api_key i ip_address). Vos recomane que des del tauler de configuració de l’API de Namecheap indiqueu només la IP del servidor per augmentar la seguretat, així l’API només és accessible de la IP del servidor.
- El tercer pas serà la creació d’un segon script en bash per a executar diverses ordres. Heu de substituir el nom del domini “exemple.com” pel vostre. Us el compartisc més avall:
sudo nano /etc/letsencrypt/renew_exemple.sh
#!/bin/bash
# Esborrat previ del certificat anterior. Comenteu-lo per a la primera petició del certificat.
certbot delete -n --cert-name exemple.com
# Petició del nou certificat (límit 5 - 7 per setmana)
## Certificat només wildcard (falla si es demana amb el domini principal)
## Afegir l'opció --dry run per fer proves
certbot certonly -n --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory -d "*.exemple.com" --manual-auth-hook=/etc/letsencrypt/letsencrypt-namecheap-dns01-manual-auth-hook.py
# Expansió del certificat wildcard amb el domini principal.
certbot certonly -n --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory -d "*.exemple.com" --expand -d "exemple.com" --manual-auth-hook=/etc/letsencrypt/letsencrypt-namecheap-dns01-manual-auth-hook.py
# Reinicia nginx
service nginx restart
L’script executa quatre ordres; la primera és per eliminar el certificat que ja tinguéreu instal·lat per el domini en qüestió, la segona executa l’ordre per a la creació del certificat “wildcard”, la tercera és necessària per expandir el certificat al domini principal i per últim l’ordre per al reinici d’nginx.
No oblideu donar-li permisos d’execució a l’script amb: sudo chmod +x nom_script.sh
.
L’últim que haureu de fer és afegir l’script bash a crontab per a s’execute cada cert temps. Aquest script només permet l’esborrat i posterior creació d’un certificat, així que s’hauria d’indicar un temps menor que la duració del certificat Letsencrypt (3 mesos), per exemple, cada 2 mesos. Executem les següents ordres:
sudo crontab -u root -e
Haureu d’afegir un línia que apunte al vostre script. A l’exemple l’script s’executarà el dia 1 del mes cada 2 mesos.
0 0 1 */2 * /bin/bash /etc/letsencrypt/renew_exemple.sh
Si teniu altres proveïdors de domini que no siguen Namecheap potser no vos cal aquest tutorial. Hauríeu de consultar la informació completa del paquet certbot
ja que el paquet ja inclou la creació o renovació utilitzant DNS (igual que amb aquest script) per molts d’ells.
man certbot
--dns-cloudflare Obtain certificates using a DNS TXT record (if you are
using Cloudflare for DNS). (default: False)
--dns-cloudxns Obtain certificates using a DNS TXT record (if you are
using CloudXNS for DNS). (default: False)
--dns-digitalocean Obtain certificates using a DNS TXT record (if you are
using DigitalOcean for DNS). (default: False)
--dns-dnsimple Obtain certificates using a DNS TXT record (if you are
using DNSimple for DNS). (default: False)
--dns-dnsmadeeasy Obtain certificates using a DNS TXT record (if you are
using DNS Made Easy for DNS). (default: False)
--dns-gehirn Obtain certificates using a DNS TXT record (if you are
using Gehirn Infrastructure Service for DNS).
(default: False)
--dns-google Obtain certificates using a DNS TXT record (if you are
using Google Cloud DNS). (default: False)
--dns-linode Obtain certificates using a DNS TXT record (if you are
using Linode for DNS). (default: False)
--dns-luadns Obtain certificates using a DNS TXT record (if you are
using LuaDNS for DNS). (default: False)
--dns-nsone Obtain certificates using a DNS TXT record (if you are
using NS1 for DNS). (default: False)
--dns-ovh Obtain certificates using a DNS TXT record (if you are
using OVH for DNS). (default: False)
--dns-rfc2136 Obtain certificates using a DNS TXT record (if you are
using BIND for DNS). (default: False)
--dns-route53 Obtain certificates using a DNS TXT record (if you are
using Route53 for DNS). (default: False)
--dns-sakuracloud Obtain certificates using a DNS TXT record (if you are
using Sakura Cloud for DNS). (default: False)
Font: Simon Aldrich