SSLmentor

Kvalitetni TLS/SSL certifikati za web stranice i internet projekte.

Certbot

Certbot

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.

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 odjeljak

Stvaranje 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 configtest vraća Syntax OK.
  • curl -I http://example.com odgovara putem HTTP-a.
  • curl -I https://example.com odgovara putem HTTPS-a.
  • certbot certificates prikazuje očekivani certifikat.
  • certbot renew --dry-run prolazi bez pogreške.
  • systemctl list-timers | grep certbot prikazuje aktivan certbot.timer.

Povratak na pomoć
Našli ste grešku ili ne razumete nešto? Pišite nam!

CA Sectigo
CA RapidSSL
CA Thawte
CA GeoTrust
CA DigiCert
CA Certum