Automatická obnova certifikátov pre subdomény na freenom

Nedávno som napísal článok ako vytvoriť na verejnej doméne privátne subdomény a získať pre nich platné certifikáty od Let’s Encrypt. V závere som spomenul, že sa budem snažiť obnovu certifikátov automatizovať pomocou pluginu, alebo zmenou DNS serverov. V tomto článku len stručne uvediem ako som postupoval.

Inštalovať budeme certbot-dns-freenom plugin. Popíšem len inštaláciu pluginu (koniec koncov postup je aj na githube). Predpokladom je už nainštalovaný a nakonfigurovaný reverzný server proxy Nginx vrátane Certbotu. Prihlásime sa cez SSH na reverzný proxy server.

sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip
sudo pip install certbot certbot-dns-freenom 

Výstupom posledného príkazu by mohol vyzerať následovne

Requirement already satisfied: certbot in /usr/lib/python3/dist-packages (1.12.0)
Collecting certbot-dns-freenom
  Downloading certbot-dns-freenom-1.3.3.tar.gz (4.1 kB)
Collecting freenom
  Downloading freenom-0.0.2-py3-none-any.whl (5.7 kB)
Requirement already satisfied: setuptools in /usr/lib/python3/dist-packages (from certbot-dns-freenom) (52.0.0)
Requirement already satisfied: zope.interface in /usr/lib/python3/dist-packages (from certbot-dns-freenom) (5.2.0)
Collecting lxml>=4.5.0
  Downloading lxml-4.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (6.9 MB)
     ||||| 6.9 MB 2.8 MB/s 
Collecting retrying>=1.3.3
  Downloading retrying-1.3.3.tar.gz (10 kB)
Requirement already satisfied: requests>=2.23.0 in /usr/lib/python3/dist-packages (from freenom->certbot-dns-freenom) (2.25.1)
Requirement already satisfied: six>=1.7.0 in /usr/lib/python3/dist-packages (from retrying>=1.3.3->freenom->certbot-dns-freenom) (1.16.0)
Building wheels for collected packages: certbot-dns-freenom, retrying
  Building wheel for certbot-dns-freenom (setup.py) ... done
  Created wheel for certbot-dns-freenom: filename=certbot_dns_freenom-1.3.3-py3-none-any.whl size=4798 sha256=01973aab92f40fc206ca4b9e1cd361996a2f0d10837c51b4a9db99c1ecf9193e
  Stored in directory: /root/.cache/pip/wheels/b6/20/be/2db2af9d54edfc951acc012e2c037bf2cff9e912a037baffa1
  Building wheel for retrying (setup.py) ... done
  Created wheel for retrying: filename=retrying-1.3.3-py3-none-any.whl size=11430 sha256=d3282ab8baf4d974803936be5cc9e76c3c8d4aeeca52cf0cce1f7dfb5ca86649
  Stored in directory: /root/.cache/pip/wheels/ce/18/7f/e9527e3e66db1456194ac7f61eb3211068c409edceecff2d31
Successfully built certbot-dns-freenom retrying
Installing collected packages: retrying, lxml, freenom, certbot-dns-freenom
Successfully installed certbot-dns-freenom-1.3.3 freenom-0.0.2 lxml-4.7.1 retrying-1.3.3

Teraz si vytvoríme súbor, kde budeme mať uložené prihlasovacie údaje na freenom konto

Aktualizácia 30.01.2022

Počas procesu získavania certifikátu som vždy videl túto hlášku

Plugin legacy name certbot-dns-freenom:dns-freenom may be removed in a future version. Please use dns-freenom instead.

Cerifikát sa vygeneroval bez problémov, ale chcel som sa tejto hlášky zbaviť. V podstate všetko ostáva tak, ale zmenia sa názvy premenných

nano credentials.ini

Povodné

certbot_dns_freenom:dns_freenom_username = username
certbot_dns_freenom:dns_freenom_password = password

Nové

dns_freenom_username = username
dns_freenom_password = password

Koniec aktualizácie

Nastavíme pre súbor práva

chmod 600 credentials.ini

Pôvodný skript pre získanie certifikátu

certbot certonly -a certbot-dns-freenom:dns-freenom \
  --certbot-dns-freenom:dns-freenom-credentials /path/to/credentials.ini \
  --certbot-dns-freenom:dns-freenom-propagation-seconds 300 \
  -d "*.example.com" \
  -m admin@example.com \
  --agree-tos -n

Nový skript pre získanie certifikátu

certbot certonly -a dns-freenom \
  --dns-freenom-credentials /path/to/credentials.ini \
  --dns-freenom-propagation-seconds 300 \
  -d "*.example.com" \
  -m admin@example.com \
  --agree-tos -n

Keď Let’s Encrypt poskytne klientovi ACME token, klient vytvorí záznam TXT odvodený z tohto tokenu a kľúča nášho účtu. Tento záznam umiestni na _acme-challenge.<YOUR_DOMAIN>. Potom Let’s Encrypt požiada systém DNS o tento záznam. Ak nájde zhodu, môže pristúpiť k vydaniu certifikátu. V minulom článku sme toto robili ručne (teraz to je plne automatizované). Po získani certifikátov, plugin TXT záznam z DNS servera odstráni.

Niektorým DNS serverom trvá dlhšie aktualizácia záznamov. Ak by sme zistili, že TXT záznam na DNS servery nie je stale aktuálny, tak môžeme navýšiť čas z 300 sekúnd napr. na 600, alebo 900

dns-freenom-propagation-seconds 600

Keď spustíme obnovu certifikátov na sucho, tak simulácia obnovy by mala skončiť úspešne, vrátane našich subdomén pomocou DNS-01 Challenge.

sudo certbot renew --dry-run

Leave a Reply

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *