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