SSLmentor

Kwaliteit TLS/SSL-certificaten voor websites en internetprojecten.

Certbot

Certbot

ACME-client Certbot

Een gedetailleerde handleiding voor de volledige implementatie van een DV ACME SSL-certificaat op een Debian (Apache) VPS met automatische verlenging via de standaard Certbot-timer. De handleiding beschrijft de implementatie van een DV-certificaat voor één domein of meerdere domeinen, bijvoorbeeld example.com en www.example.com. Voor standaardimplementaties raden we aan de standaard Certbot-map /etc/letsencrypt te gebruiken. Op deze manier worden verlengingen afgehandeld door de standaard systeemtimer certbot.timer.
Deze handleiding behandelt geen wildcard WildCard SSL-certificaten, die DNS-validatie en een DNS API vereisen voor automatische verlenging.

Basisbegrippen

  • ACME – protocol voor geautomatiseerde uitgifte en verlenging van SSL/TLS-certificaten.
  • Certbot – een ACME-client die communiceert met de certificeringsautoriteit en een certificaat naar Apache kan uitrollen.
  • kid + hmac – External Account Binding (EAB)-gegevens van de certificeringsautoriteit. Ze koppelen Certbot aan een account of product.
    kid en hmac verifiëren geen domeineigendom, ze koppelen de ACME-client aan een CA-account. Het domein wordt afzonderlijk geverifieerd via de ACME-challenge. hmac is een gevoelige waarde — deel deze niet openbaar en bewaar deze niet in gedeelde handleidingen.
  • http-01 – domeinvalidatie via een tijdelijk bestand dat bereikbaar is op het HTTP-adres van het domein.
  • dns-01 – validatie via een DNS TXT-record. Vereist voor wildcard-certificaten.

Vervang in de voorbeelden example.com door uw eigen domein.

Apache, webroot

Basisconfiguratie van Apache en het domein op de server.

›› Sectie tonen/verbergen

Een aparte webroot voor het domein aanmaken en een eenvoudige testpagina. Apache op Debian gebruikt standaard de gebruiker www-data.

apt update
apt install -y apache2
systemctl enable --now apache2
a2enmod rewrite headers ssl
systemctl reload apache2
Commando Wat het doet
apt update Werkt de pakketlijst bij uit de Debian-repository's.
apt install -y apache2 Installeert de Apache-webserver. De parameter -y bevestigt de installatie automatisch.
systemctl enable --now apache2 Schakelt Apache in bij het opstarten van de server en start het onmiddellijk.
a2enmod rewrite headers ssl Schakelt veelgebruikte Apache-modules in voor omleidingen, headers en HTTPS.
systemctl reload apache2 Herlaadt de Apache-configuratie zonder een volledige herstart van de service.

De webroot voorbereiden

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

Een Apache virtual host aanmaken


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
            

De Apache-site activeren en HTTP-controle
Voordat het certificaat wordt uitgegeven, moet het domein via HTTP reageren. Dit is vereist voor de ACME http-01-validatie.

a2ensite $DOMAIN.conf
apache2ctl configtest
systemctl reload apache2

curl -I http://$DOMAIN
curl http://$DOMAIN

Certbot installeren + een certificaat uitgeven

Certbot installeren vanuit de Debian-repository's. Het pakket python3-certbot-apache stelt Certbot in staat om de Apache-configuratie te wijzigen, de validatie uit te voeren en het uitgegeven certificaat uit te rollen.

apt install -y certbot python3-certbot-apache
certbot --version

Certbot ondersteunt een breed scala aan systemen en webservers. We raden aan de Certbot Instructions te raadplegen voor de specifieke procedure voor de door u gekozen webserver.

Registratie van een ACME-account

Om een certificaat uit te geven, moet u een ACME-account bij de certificeringsautoriteit hebben. In deze handleiding gebruiken we ACME-certificaten van CA Certum.
De EAB-gegevens (kid + hmac) vindt u in de details van uw bestelling.

certbot register \
--server https://acme.certum.pl/directory \
--email certum@example.com \
--agree-tos \
--eab-kid 'KID' \
--eab-hmac-key 'HMAC'
Parameter Betekenis
--server Geeft het specifieke ACME-endpoint op. Zonder deze parameter zou Certbot de standaard ACME-server gebruiken.
CA DigiCert: https://one.digicert.com/mpki/api/v1/acme/v2/directory
CA Sectigo: https://acme.sectigo.com/v2/DV
--email Contact-e-mail voor het ACME-account.
--agree-tos Acceptatie van de servicevoorwaarden.
--eab-kid KID-identificatie.
--eab-hmac-key Geheime HMAC EAB-sleutel.

Een ACME-certificaat uitgeven

certbot --apache \
--server https://acme.certum.pl/directory \
--cert-name $DOMAIN \
-d $DOMAIN \
-d www.$DOMAIN

De parameter --cert-name is bijzonder belangrijk bij het beheren van meerdere certificaten op één server. Elk afzonderlijk certificaat moet zijn eigen unieke naam hebben.

Het certificaat verifiëren en automatische verlenging

certbot certificates
systemctl list-timers | grep certbot
certbot renew --dry-run
curl -I https://$DOMAIN
Commando Doel
certbot certificates Toont de certificaten die door Certbot worden beheerd.
systemctl list-timers | grep certbot Controleert of de standaardtimer voor automatische verlenging actief is.
certbot renew --dry-run Simuleert de verlenging van het certificaat zonder het productiecertificaat te vervangen. Correcte uitvoer: "all simulated renewals succeeded".
curl -I https://$DOMAIN Controleert de HTTPS-respons van het domein.

Meerdere certificaten op één server

Certbot kan meerdere certificaten beheren in de standaardmap /etc/letsencrypt. Dit model is het eenvoudigst voor klantimplementaties, omdat het de standaard certbot.timer gebruikt.

  • Maak een aparte Apache-vhost aan
    Elk domein moet zijn eigen bestand hebben in /etc/apache2/sites-available/ en zijn eigen webroot.
  • Geef een certificaat uit met een unieke --cert-name
    Gebruik niet dezelfde certificaatnaam voor een ander afzonderlijk certificaat.
  • Controleer de verlenging van alle certificaten
    Het commando certbot renew --dry-run moet slagen voor alle vermeldingen in /etc/letsencrypt/renewal/.

Voorbeeldcommando voor een extra domein 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
        

Oplossing voor meerdere EAB-accounts

Bij de certificeringsautoriteit kan elk product zijn eigen EAB-waarden hebben. Als er al een CA ACME-account op de server is geregistreerd, kan een nieuwe registratie voor dezelfde ACME-server resulteren in een fout:

There is an existing account; registration of a duplicate account with this command is currently unsupported.

Blijf in een dergelijke situatie in de standaardmap /etc/letsencrypt, maar registreer het nieuwe account met behulp van de volgende oplossing. Gebruik na uitgifte de specifieke --account ACCOUNT_ID.

Bestaande accounts tijdelijk verplaatsen
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"/ \;
Een nieuw EAB-account registreren
certbot register \ --server https://acme.certum.pl/directory \ --email certum@example.com \ --agree-tos \ --eab-kid 'KID' \ --eab-hmac-key 'HMAC'
De nieuwe account-ID vinden
ls -1 "$ACME_ACCOUNT_DIR"

De uitvoer van dit commando is de nieuwe ACCOUNT_ID. Gebruik deze waarde bij het uitgeven van het certificaat.

De oorspronkelijke accounts herstellen
find "$BACKUP_DIR" -mindepth 1 -maxdepth 1 -type d -exec mv {} "$ACME_ACCOUNT_DIR"/ \;
Een certificaat uitgeven via een specifiek account
certbot --apache \ --server https://acme.certum.pl/directory \ --account ACCOUNT_ID \ --cert-name example.net \ -d example.net \ -d www.example.net
Waarom de oplossing nodig is Wat het oplost
Certbot weigert een dubbel account voor dezelfde ACME-server te registreren. Het tijdelijk verplaatsen van accounts maakt de registratie van een nieuw EAB-account mogelijk.
De standaardmap /etc/letsencrypt moet op de server blijven staan. De standaard certbot.timer verlengt vervolgens alle certificaten zonder een aangepaste cron.
Elk CA-product kan zijn eigen EAB-binding hebben. De parameter --account forceert het juiste CA-account tijdens de uitgifte.
Verificatiechecklist
  • apache2ctl configtest geeft Syntax OK terug.
  • curl -I http://example.com reageert via HTTP.
  • curl -I https://example.com reageert via HTTPS.
  • certbot certificates toont het verwachte certificaat.
  • certbot renew --dry-run slaagt zonder fout.
  • systemctl list-timers | grep certbot toont een actieve certbot.timer.

Terug naar Help
Een fout gevonden of iets niet begrepen? Schrijf ons!

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