ACME klijent Certbot
Detaljan vodič za potpunu implementaciju DV ACME SSL certifikata na Debian (Apache) VPS-u s automatskim obnavljanjem putem zadanog Certbot timera. Vodič opisuje implementaciju jednodomenskog ili višedomenskog DV certifikata, primjerice example.com i www.example.com. Za standardne implementacije preporučujemo korištenje standardnog Certbot direktorija /etc/letsencrypt. Na taj način obnavljanja obavlja zadani sistemski timer certbot.timer.
Ovaj vodič ne obrađuje wildcard WildCard SSL certifikate, koji za automatsko obnavljanje zahtijevaju DNS validaciju i DNS API.
Sadržaj članka
- Osnovni pojmovi
- Apache, webroot
- Certbot, izdavanje certifikata
- Više certifikata na jednom poslužitelju
- Više EAB računa
Osnovni pojmovi
- ACME – Protokol za automatizirano izdavanje i obnavljanje SSL/TLS certifikata.
- Certbot – ACME klijent koji komunicira s certifikacijskim tijelom i može implementirati certifikat na Apache.
- kid + hmac – External Account Binding (EAB) vjerodajnice od certifikacijskog tijela. Povezuju Certbot s računom ili proizvodom.
kid i hmac ne provjeravaju vlasništvo nad domenom, oni povezuju ACME klijent s CA računom. Domena se provjerava zasebno putem ACME izazova. hmac je osjetljiva vrijednost — nemojte je dijeliti javno niti pohranjivati u zajedničkim vodičima. - http-01 – Validacija domene putem privremene datoteke dostupne na HTTP adresi domene.
- dns-01 – Validacija putem DNS TXT zapisa. Potrebna za wildcard certifikate.
U primjerima zamijenite example.com svojom vlastitom domenom.
Apache, webroot
Osnovna konfiguracija Apachea i domene na poslužitelju.
›› Prikaži/Sakrij odjeljakStvaranje zasebnog webroota za domenu i jednostavne testne stranice. Apache na Debianu prema zadanim postavkama koristi korisnika www-data.
apt update
apt install -y apache2
systemctl enable --now apache2
a2enmod rewrite headers ssl
systemctl reload apache2
| Naredba | Što radi |
|---|---|
apt update |
Ažurira popis paketa iz Debian repozitorija. |
apt install -y apache2 |
Instalira Apache web poslužitelj. Parametar -y automatski potvrđuje instalaciju. |
systemctl enable --now apache2 |
Omogućuje Apache pri pokretanju poslužitelja i odmah ga pokreće. |
a2enmod rewrite headers ssl |
Omogućuje uobičajene Apache module za preusmjeravanja, zaglavlja i HTTPS. |
systemctl reload apache2 |
Ponovno učitava Apache konfiguraciju bez potpunog ponovnog pokretanja usluge. |
Priprema webroota
DOMAIN="example.com"
mkdir -p /var/www/$DOMAIN/public
chown -R www-data:www-data /var/www/$DOMAIN
chmod -R 755 /var/www/$DOMAIN
echo "OK $DOMAIN" > /var/www/$DOMAIN/public/index.html
Stvaranje Apache virtualnog hosta
cat > /etc/apache2/sites-available/$DOMAIN.conf <<EOF
<VirtualHost *:80>
ServerName $DOMAIN
ServerAlias www.$DOMAIN
DocumentRoot /var/www/$DOMAIN/public
<Directory /var/www/$DOMAIN/public>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog \${APACHE_LOG_DIR}/${DOMAIN}_error.log
CustomLog \${APACHE_LOG_DIR}/${DOMAIN}_access.log combined
</VirtualHost>
EOF
Aktivacija Apache stranice i provjera HTTP-a
Prije izdavanja certifikata domena mora odgovarati putem HTTP-a. To je potrebno za ACME http-01 validaciju.
a2ensite $DOMAIN.conf
apache2ctl configtest
systemctl reload apache2
curl -I http://$DOMAIN
curl http://$DOMAIN
Instalacija Certbota + izdavanje certifikata
Instalacija Certbota iz Debian repozitorija. Paket python3-certbot-apache omogućuje Certbotu da mijenja Apache konfiguraciju, provodi validaciju i implementira izdani certifikat.
apt install -y certbot python3-certbot-apache
certbot --version
Certbot podržava širok raspon sustava i web poslužitelja. Preporučujemo da provjerite Certbot Instructions za konkretan postupak za vaš odabrani web poslužitelj.
Registracija ACME računa
Za izdavanje certifikata potrebno je imati ACME račun kod certifikacijskog tijela. U ovom vodiču koristit ćemo ACME certifikate od CA Certum.
EAB vjerodajnice (kid + hmac) dobit ćete u detaljima narudžbe.
certbot register \
--server https://acme.certum.pl/directory \
--email certum@example.com \
--agree-tos \
--eab-kid 'KID' \
--eab-hmac-key 'HMAC'
| Parametar | Značenje |
|---|---|
--server |
Određuje konkretnu ACME krajnju točku. Bez ovog parametra Certbot bi koristio zadani ACME poslužitelj. CA DigiCert: https://one.digicert.com/mpki/api/v1/acme/v2/directory CA Sectigo: https://acme.sectigo.com/v2/DV |
--email |
Kontakt e-mail za ACME račun. |
--agree-tos |
Prihvaćanje uvjeta usluge. |
--eab-kid |
KID identifikator. |
--eab-hmac-key |
Tajni HMAC EAB ključ. |
Izdavanje ACME certifikata
certbot --apache \
--server https://acme.certum.pl/directory \
--cert-name $DOMAIN \
-d $DOMAIN \
-d www.$DOMAIN
Parametar --cert-name posebno je važan pri upravljanju s više certifikata na jednom poslužitelju. Svaki pojedini certifikat trebao bi imati svoj vlastiti jedinstveni naziv.
Provjera certifikata i automatsko obnavljanje
certbot certificates
systemctl list-timers | grep certbot
certbot renew --dry-run
curl -I https://$DOMAIN
| Naredba | Svrha |
|---|---|
certbot certificates |
Prikazuje certifikate kojima upravlja Certbot. |
systemctl list-timers | grep certbot |
Provjerava radi li zadani timer za automatsko obnavljanje. |
certbot renew --dry-run |
Simulira obnavljanje certifikata bez zamjene produkcijskog certifikata. Ispravan ispis: "all simulated renewals succeeded". |
curl -I https://$DOMAIN |
Provjerava HTTPS odgovor domene. |
Više certifikata na jednom poslužitelju
Certbot može upravljati s više certifikata u standardnom direktoriju /etc/letsencrypt. Ovaj je model najjednostavniji za implementacije kod kupaca jer koristi zadani certbot.timer.
- Stvorite zaseban Apache vhost
Svaka domena trebala bi imati svoju vlastitu datoteku u /etc/apache2/sites-available/ i svoj vlastiti webroot. - Izdajte certifikat s jedinstvenim --cert-name
Nemojte koristiti isti naziv certifikata za drugi pojedinačni certifikat. - Provjerite obnavljanje svih certifikata
Naredba certbot renew --dry-run mora proći za sve unose u /etc/letsencrypt/renewal/.
Primjer naredbe za dodatnu domenu example.net:
DOMAIN="example.net"
mkdir -p /var/www/$DOMAIN/public
chown -R www-data:www-data /var/www/$DOMAIN
chmod -R 755 /var/www/$DOMAIN
echo "OK $DOMAIN" > /var/www/$DOMAIN/public/index.html
cat > /etc/apache2/sites-available/$DOMAIN.conf <<EOF
<VirtualHost *:80>
ServerName $DOMAIN
ServerAlias www.$DOMAIN
DocumentRoot /var/www/$DOMAIN/public
<Directory /var/www/$DOMAIN/public>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog \${APACHE_LOG_DIR}/${DOMAIN}_error.log
CustomLog \${APACHE_LOG_DIR}/${DOMAIN}_access.log combined
</VirtualHost>
EOF
a2ensite $DOMAIN.conf
apache2ctl configtest
systemctl reload apache2
curl -I http://$DOMAIN
certbot --apache \
--server https://acme.certum.pl/directory \
--cert-name $DOMAIN \
-d $DOMAIN
-d www.$DOMAIN
certbot renew --dry-run
Rješenje za više EAB računa
Kod certifikacijskog tijela svaki proizvod može imati svoje vlastite EAB vrijednosti. Ako je CA ACME račun već registriran na poslužitelju, još jedna registracija za isti ACME poslužitelj može rezultirati pogreškom:
There is an existing account; registration of a duplicate account with this command is currently unsupported.
U takvoj situaciji ostanite u standardnom /etc/letsencrypt, ali novi račun registrirajte sljedećim rješenjem. Nakon izdavanja koristite konkretni --account ACCOUNT_ID.
Privremeno premještanje postojećih računa
ACME_ACCOUNT_DIR="/etc/letsencrypt/accounts/acme.certum.pl/directory"
BACKUP_DIR="/root/certbot-certum-accounts-backup-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$BACKUP_DIR"
find "$ACME_ACCOUNT_DIR" -mindepth 1 -maxdepth 1 -type d -exec mv {} "$BACKUP_DIR"/ \;
Registracija novog EAB računa
certbot register \
--server https://acme.certum.pl/directory \
--email certum@example.com \
--agree-tos \
--eab-kid 'KID' \
--eab-hmac-key 'HMAC'
Pronalaženje ID-a novog računa
ls -1 "$ACME_ACCOUNT_DIR"
Ispis ove naredbe je novi ACCOUNT_ID. Koristite ovu vrijednost pri izdavanju certifikata.
Vraćanje izvornih računa
find "$BACKUP_DIR" -mindepth 1 -maxdepth 1 -type d -exec mv {} "$ACME_ACCOUNT_DIR"/ \;
Izdavanje certifikata putem određenog računa
certbot --apache \
--server https://acme.certum.pl/directory \
--account ACCOUNT_ID \
--cert-name example.net \
-d example.net \
-d www.example.net
| Zašto je rješenje potrebno | Što rješava |
|---|---|
| Certbot odbija registrirati duplikat računa za isti ACME poslužitelj. | Privremeno premještanje računa omogućuje registraciju novog EAB računa. |
Standardni /etc/letsencrypt trebao bi ostati na poslužitelju. |
Zadani certbot.timer zatim obnavlja sve certifikate bez prilagođenog crona. |
| Svaki CA proizvod može imati svoje vlastito EAB povezivanje. | Parametar --account prisiljava ispravan CA račun tijekom izdavanja. |
Kontrolni popis za provjeru
apache2ctl configtestvraćaSyntax OK.curl -I http://example.comodgovara putem HTTP-a.curl -I https://example.comodgovara putem HTTPS-a.certbot certificatesprikazuje očekivani certifikat.certbot renew --dry-runprolazi bez pogreške.systemctl list-timers | grep certbotprikazuje aktivancertbot.timer.
Kamo dalje?
Povratak na pomoć
Našli ste grešku ili ne razumete nešto? Pišite nam!
