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ó.

  1. 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.
  2. 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.
  3. 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 --manual-public-ip-logging-ok --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 --manual-public-ip-logging-ok --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory -d "*.exemple.com" --expand -d "dtalens.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

Publicat per dtalens

Professor. Amant de la tecnologia en general i especialment del món web.

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *