ACME klijent Certbot
Detaljan vodič za potpuno postavljanje DV ACME SSL sertifikata na Debian (Apache) VPS sa automatskim obnavljanjem putem podrazumevanog Certbot tajmera. Vodič opisuje postavljanje jednodomenskog ili višedomenskog DV sertifikata, na primer example.com i www.example.com. Za standardna postavljanja preporučujemo korišćenje standardnog Certbot direktorijuma /etc/letsencrypt. Na ovaj način obnavljanjima upravlja podrazumevani sistemski tajmer certbot.timer.
Ovaj vodič ne obuhvata wildcard WildCard SSL sertifikate, koji zahtevaju DNS validaciju i DNS API za automatsko obnavljanje.
Sadržaj članka
- Osnovni pojmovi
- Apache, webroot
- Certbot, izdavanje sertifikata
- Više sertifikata na jednom serveru
- Više EAB naloga
Osnovni pojmovi
- ACME – Protokol za automatizovano izdavanje i obnavljanje SSL/TLS sertifikata.
- Certbot – ACME klijent koji komunicira sa sertifikacionim telom i može postaviti sertifikat na Apache.
- kid + hmac – External Account Binding (EAB) akreditivi od sertifikacionog tela. Oni povezuju Certbot sa nalogom ili proizvodom.
kid i hmac ne proveravaju vlasništvo nad domenom, oni povezuju ACME klijent sa CA nalogom. Domen se proverava odvojeno putem ACME izazova. hmac je osetljiva vrednost — ne delite je javno i ne čuvajte je u deljenim vodičima. - http-01 – Validacija domena putem privremenog fajla dostupnog na HTTP adresi domena.
- dns-01 – Validacija putem DNS TXT zapisa. Neophodna za wildcard sertifikate.
U primerima zamenite example.com sopstvenim domenom.
Apache, webroot
Osnovna konfiguracija Apache i domena na serveru.
›› Prikaži/Sakrij sekcijuKreiranje zasebnog webroot-a za domen i jednostavne test stranice. Apache na Debian-u podrazumevano koristi korisnika www-data.
apt update
apt install -y apache2
systemctl enable --now apache2
a2enmod rewrite headers ssl
systemctl reload apache2
| Komanda | Šta radi |
|---|---|
apt update |
Ažurira listu paketa iz Debian repozitorijuma. |
apt install -y apache2 |
Instalira Apache veb server. Parametar -y automatski potvrđuje instalaciju. |
systemctl enable --now apache2 |
Omogućava Apache pri pokretanju servera i odmah ga pokreće. |
a2enmod rewrite headers ssl |
Omogućava uobičajene Apache module za preusmeravanja, zaglavlja i HTTPS. |
systemctl reload apache2 |
Ponovo učitava Apache konfiguraciju bez potpunog ponovnog pokretanja servisa. |
Priprema webroot-a
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
Kreiranje Apache virtuelnog 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
Aktiviranje Apache sajta i HTTP provera
Pre izdavanja sertifikata, domen mora da odgovara putem HTTP. Ovo je neophodno za ACME http-01 validaciju.
a2ensite $DOMAIN.conf
apache2ctl configtest
systemctl reload apache2
curl -I http://$DOMAIN
curl http://$DOMAIN
Instalacija Certbot + izdavanje sertifikata
Instalacija Certbot iz Debian repozitorijuma. Paket python3-certbot-apache omogućava Certbot-u da menja Apache konfiguraciju, izvršava validaciju i postavlja izdati sertifikat.
apt install -y certbot python3-certbot-apache
certbot --version
Certbot podržava širok spektar sistema i veb servera. Preporučujemo da proverite Certbot Instructions za konkretan postupak za vaš izabrani veb server.
Registracija ACME naloga
Da biste izdali sertifikat, potrebno je da imate ACME nalog kod sertifikacionog tela. U ovom vodiču koristićemo ACME sertifikate od CA Certum.
EAB akreditive (kid + hmac) dobićete u detaljima porudžbine.
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 |
Navodi konkretni ACME endpoint. Bez ovog parametra, Certbot bi koristio podrazumevani ACME server. CA DigiCert: https://one.digicert.com/mpki/api/v1/acme/v2/directory CA Sectigo: https://acme.sectigo.com/v2/DV |
--email |
Kontakt email za ACME nalog. |
--agree-tos |
Prihvatanje uslova korišćenja. |
--eab-kid |
KID identifikator. |
--eab-hmac-key |
Tajni HMAC EAB ključ. |
Izdavanje ACME sertifikata
certbot --apache \
--server https://acme.certum.pl/directory \
--cert-name $DOMAIN \
-d $DOMAIN \
-d www.$DOMAIN
Parametar --cert-name je posebno važan pri upravljanju sa više sertifikata na jednom serveru. Svaki pojedinačni sertifikat treba da ima svoje jedinstveno ime.
Provera sertifikata i automatsko obnavljanje
certbot certificates
systemctl list-timers | grep certbot
certbot renew --dry-run
curl -I https://$DOMAIN
| Komanda | Svrha |
|---|---|
certbot certificates |
Prikazuje sertifikate kojima upravlja Certbot. |
systemctl list-timers | grep certbot |
Proverava da li je pokrenut podrazumevani tajmer za automatsko obnavljanje. |
certbot renew --dry-run |
Simulira obnavljanje sertifikata bez zamene produkcionog sertifikata. Ispravan izlaz: "all simulated renewals succeeded". |
curl -I https://$DOMAIN |
Proverava HTTPS odgovor domena. |
Više sertifikata na jednom serveru
Certbot može upravljati sa više sertifikata u standardnom /etc/letsencrypt direktorijumu. Ovaj model je najjednostavniji za postavljanja kod klijenata jer koristi podrazumevani certbot.timer.
- Kreirajte zaseban Apache vhost
Svaki domen treba da ima svoj fajl u /etc/apache2/sites-available/ i svoj webroot. - Izdajte sertifikat sa jedinstvenim --cert-name
Ne koristite isto ime sertifikata za drugi pojedinačni sertifikat. - Proverite obnavljanje svih sertifikata
Komanda certbot renew --dry-run mora proći za sve unose u /etc/letsencrypt/renewal/.
Primer komande za dodatni domen 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
Rešenje za više EAB naloga
Kod sertifikacionog tela svaki proizvod može imati sopstvene EAB vrednosti. Ako je CA ACME nalog već registrovan na serveru, druga registracija za isti ACME server može rezultovati greš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 registrujte novi nalog koristeći sledeće zaobilazno rešenje. Nakon izdavanja, koristite konkretan --account ACCOUNT_ID.
Privremeno premeštanje postojećih naloga
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 naloga
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 naloga
ls -1 "$ACME_ACCOUNT_DIR"
Izlaz ove komande je novi ACCOUNT_ID. Koristite ovu vrednost pri izdavanju sertifikata.
Vraćanje originalnih naloga
find "$BACKUP_DIR" -mindepth 1 -maxdepth 1 -type d -exec mv {} "$ACME_ACCOUNT_DIR"/ \;
Izdavanje sertifikata putem konkretnog naloga
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 zaobilazno rešenje potrebno | Šta rešava |
|---|---|
| Certbot odbija da registruje duplikat naloga za isti ACME server. | Privremeno premeštanje naloga omogućava registraciju novog EAB naloga. |
Standardni /etc/letsencrypt treba da ostane na serveru. |
Podrazumevani certbot.timer zatim obnavlja sve sertifikate bez prilagođenog cron-a. |
| Svaki CA proizvod može imati sopstveno EAB povezivanje. | Parametar --account nameće ispravan CA nalog tokom izdavanja. |
Kontrolna lista za proveru
apache2ctl configtestvraćaSyntax OK.curl -I http://example.comodgovara putem HTTP.curl -I https://example.comodgovara putem HTTPS.certbot certificatesprikazuje očekivani sertifikat.certbot renew --dry-runprolazi bez greške.systemctl list-timers | grep certbotprikazuje aktivancertbot.timer.
Kuda dalje?
Nazad na Pomoć
Pronašli ste grešku ili vam nešto nije jasno? Pišite nam!
