SSLmentor

Kvalitativa TLS/SSL-certifikat för webbplatser och internetprojekt.

Certbot

Certbot

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.

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 avsnitt

Skapa 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 configtest returnerar Syntax OK.
  • curl -I http://example.com svarar via HTTP.
  • curl -I https://example.com svarar via HTTPS.
  • certbot certificates visar det förväntade certifikatet.
  • certbot renew --dry-run lyckas utan fel.
  • systemctl list-timers | grep certbot visar en aktiv certbot.timer.

Tillbaka till Hjälp
Hittat ett fel eller förstår du inte något? Skriv till oss!

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