ACME-klienten Certbot
En detaljerad guide för fullständig driftsättning av ett DV ACME SSL-certifikat på en Debian (Apache) VPS med automatisk förnyelse via Certbots standardtimer. Guiden beskriver driftsättning av ett en-domäns eller fler-domäns DV-certifikat, till exempel example.com och www.example.com. För standarddriftsättningar rekommenderar vi att du använder Certbots standardkatalog /etc/letsencrypt. På så sätt hanteras förnyelser av systemets standardtimer certbot.timer.
Denna guide täcker inte wildcard WildCard SSL-certifikat, som kräver DNS-validering och ett DNS API för automatisk förnyelse.
Innehåll i artikeln
- Grundläggande begrepp
- Apache, webroot
- Certbot, utfärdande av certifikat
- Flera certifikat på en server
- Flera EAB-konton
Grundläggande begrepp
- ACME – Protokoll för automatiserat utfärdande och förnyelse av SSL/TLS-certifikat.
- Certbot – En ACME-klient som kommunicerar med certifikatutfärdaren och kan driftsätta ett certifikat till Apache.
- kid + hmac – External Account Binding (EAB)-uppgifter från certifikatutfärdaren. De kopplar Certbot till ett konto eller en produkt.
kid och hmac verifierar inte domänägarskap, de binder ACME-klienten till ett CA-konto. Domänen verifieras separat via ACME-utmaning. hmac är ett känsligt värde — dela det inte offentligt och lagra det inte i delade guider. - http-01 – Domänvalidering via en tillfällig fil som är tillgänglig på domänens HTTP-adress.
- dns-01 – Validering via DNS TXT-post. Krävs för wildcard-certifikat.
I exemplen ersätter du example.com med din egen domän.
Apache, webroot
Grundläggande konfiguration av Apache och domän på servern.
›› Visa/Dölj avsnittSkapa en separat webroot för domänen och en enkel testsida. Apache på Debian använder som standard användaren www-data.
apt update
apt install -y apache2
systemctl enable --now apache2
a2enmod rewrite headers ssl
systemctl reload apache2
| Kommando | Vad det gör |
|---|---|
apt update |
Uppdaterar paketlistan från Debians förråd. |
apt install -y apache2 |
Installerar webbservern Apache. Parametern -y bekräftar installationen automatiskt. |
systemctl enable --now apache2 |
Aktiverar Apache vid serverstart och startar den omedelbart. |
a2enmod rewrite headers ssl |
Aktiverar vanliga Apache-moduler för omdirigeringar, headers och HTTPS. |
systemctl reload apache2 |
Laddar om Apache-konfigurationen utan en fullständig omstart av tjänsten. |
Förbereda webroot
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
Skapa en virtuell värd i Apache
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
Aktivera Apache-webbplatsen och HTTP-kontroll
Innan certifikatet utfärdas måste domänen svara via HTTP. Detta krävs för ACME http-01-validering.
a2ensite $DOMAIN.conf
apache2ctl configtest
systemctl reload apache2
curl -I http://$DOMAIN
curl http://$DOMAIN
Installera Certbot + utfärda ett certifikat
Installera Certbot från Debians förråd. Paketet python3-certbot-apache gör att Certbot kan ändra Apache-konfigurationen, utföra validering och driftsätta det utfärdade certifikatet.
apt install -y certbot python3-certbot-apache
certbot --version
Certbot stöder ett brett utbud av system och webbservrar. Vi rekommenderar att du kontrollerar Certbot Instructions för det specifika förfarandet för den webbserver du valt.
Registrering av ACME-konto
För att utfärda ett certifikat behöver du ha ett ACME-konto hos certifikatutfärdaren. I den här guiden använder vi ACME-certifikat från CA Certum.
Du får EAB-uppgifterna (kid + hmac) i orderdetaljerna.
certbot register \
--server https://acme.certum.pl/directory \
--email certum@example.com \
--agree-tos \
--eab-kid 'KID' \
--eab-hmac-key 'HMAC'
| Parameter | Betydelse |
|---|---|
--server |
Anger den specifika ACME-endpointen. Utan denna parameter skulle Certbot använda standard-ACME-servern. CA DigiCert: https://one.digicert.com/mpki/api/v1/acme/v2/directory CA Sectigo: https://acme.sectigo.com/v2/DV |
--email |
Kontakt-e-post för ACME-kontot. |
--agree-tos |
Godkännande av användarvillkoren. |
--eab-kid |
KID-identifierare. |
--eab-hmac-key |
Hemlig HMAC EAB-nyckel. |
Utfärda ett ACME-certifikat
certbot --apache \
--server https://acme.certum.pl/directory \
--cert-name $DOMAIN \
-d $DOMAIN \
-d www.$DOMAIN
Parametern --cert-name är särskilt viktig när du hanterar flera certifikat på en server. Varje enskilt certifikat bör ha sitt eget unika namn.
Verifiera certifikatet och automatisk förnyelse
certbot certificates
systemctl list-timers | grep certbot
certbot renew --dry-run
curl -I https://$DOMAIN
| Kommando | Syfte |
|---|---|
certbot certificates |
Visar certifikat som hanteras av Certbot. |
systemctl list-timers | grep certbot |
Verifierar att standardtimern för automatisk förnyelse är igång. |
certbot renew --dry-run |
Simulerar förnyelse av certifikatet utan att ersätta produktionscertifikatet. Korrekt utdata: "all simulated renewals succeeded". |
curl -I https://$DOMAIN |
Verifierar domänens HTTPS-svar. |
Flera certifikat på en server
Certbot kan hantera flera certifikat i standardkatalogen /etc/letsencrypt. Denna modell är den enklaste för kunddriftsättningar eftersom den använder standard-certbot.timer.
- Skapa en separat Apache-vhost
Varje domän bör ha sin egen fil i /etc/apache2/sites-available/ och sin egen webroot. - Utfärda ett certifikat med ett unikt --cert-name
Använd inte samma certifikatnamn för ett annat enskilt certifikat. - Verifiera förnyelse av alla certifikat
Kommandot certbot renew --dry-run måste lyckas för alla poster i /etc/letsencrypt/renewal/.
Exempelkommando för en ytterligare domän 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
Lösning för flera EAB-konton
Hos certifikatutfärdaren kan varje produkt ha sina egna EAB-värden. Om ett CA ACME-konto redan är registrerat på servern kan en annan registrering för samma ACME-server resultera i ett fel:
There is an existing account; registration of a duplicate account with this command is currently unsupported.
I en sådan situation, stanna kvar i standard-/etc/letsencrypt, men registrera det nya kontot med följande lösning. Efter utfärdandet, använd det specifika --account ACCOUNT_ID.
Flytta tillfälligt befintliga konton
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"/ \;
Registrera ett nytt EAB-konto
certbot register \
--server https://acme.certum.pl/directory \
--email certum@example.com \
--agree-tos \
--eab-kid 'KID' \
--eab-hmac-key 'HMAC'
Hitta det nya konto-ID:t
ls -1 "$ACME_ACCOUNT_DIR"
Utdata från detta kommando är det nya ACCOUNT_ID. Använd detta värde när du utfärdar certifikatet.
Återställa de ursprungliga kontona
find "$BACKUP_DIR" -mindepth 1 -maxdepth 1 -type d -exec mv {} "$ACME_ACCOUNT_DIR"/ \;
Utfärda ett certifikat via ett specifikt konto
certbot --apache \
--server https://acme.certum.pl/directory \
--account ACCOUNT_ID \
--cert-name example.net \
-d example.net \
-d www.example.net
| Varför lösningen behövs | Vad den löser |
|---|---|
| Certbot vägrar att registrera ett dubblettkonto för samma ACME-server. | Att tillfälligt flytta konton möjliggör registrering av ett nytt EAB-konto. |
Standard-/etc/letsencrypt bör finnas kvar på servern. |
Standard-certbot.timer förnyar sedan alla certifikat utan en egen cron. |
| Varje CA-produkt kan ha sin egen EAB-bindning. | Parametern --account tvingar fram rätt CA-konto under utfärdandet. |
Verifieringschecklista
apache2ctl configtestreturnerarSyntax OK.curl -I http://example.comsvarar via HTTP.curl -I https://example.comsvarar via HTTPS.certbot certificatesvisar det förväntade certifikatet.certbot renew --dry-runlyckas utan fel.systemctl list-timers | grep certbotvisar en aktivcertbot.timer.
Vart går du härnäst?
Tillbaka till Hjälp
Hittat ett fel eller förstår du inte något? Skriv till oss!
