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.
Inhoud van het artikel
- Basisbegrippen
- Apache, webroot
- Certbot, uitgifte van het certificaat
- Meerdere certificaten op één server
- Meerdere EAB-accounts
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/verbergenEen 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 configtestgeeftSyntax OKterug.curl -I http://example.comreageert via HTTP.curl -I https://example.comreageert via HTTPS.certbot certificatestoont het verwachte certificaat.certbot renew --dry-runslaagt zonder fout.systemctl list-timers | grep certbottoont een actievecertbot.timer.
Waar ga je nu naartoe?
Terug naar Help
Een fout gevonden of iets niet begrepen? Schrijf ons!
