ACME integracija

Kompleksnost: Srednja
Trajanje: 1-2 uri za nastavitev
Predpogoj: Dostop do DNS/HTTP izziva

Integracija protokola ACME (RFC 8555) za avtomatsko obnovo certifikatov s podporo za post-kvantno.


Arhitektura

sequenceDiagram participant Client as ACME odjemalec participant CA as ACME CA participant DNS as DNS/HTTP strežnik participant App as Aplikacija Client->>CA: 1. Ustvari račun Client->>CA: 2. Ustvari naročilo (CSR) CA->>Client: 3. Izziv (DNS-01/HTTP-01) Client->>DNS: 4. Izpolni izziv CA->>DNS: 5. Preveri izziv CA->>Client: 6. Izda certifikat Client->>App: 7. Namesti certifikat Client->>App: 8. Ponovno naloži storitev


Namestitev Certbot

# Debian/Ubuntu
apt update && apt install certbot python3-certbot-nginx
 
# RHEL/CentOS
dnf install certbot python3-certbot-nginx
 
# Z DNS vtičnikom (Cloudflare)
apt install python3-certbot-dns-cloudflare

HTTP-01 izziv

Za javno dostopne spletne strežnike:

# Nginx
certbot --nginx -d example.com -d www.example.com
 
# Apache
certbot --apache -d example.com -d www.example.com
 
# Samostojno (vrata 80 prosta)
certbot certonly --standalone -d example.com
 
# Webroot (obstoječi strežnik)
certbot certonly --webroot -w /var/www/html -d example.com

Samodejno podaljšanje Cron:

# Samodejno aktivirano pri namestitvi certbot
# Ročno preverjanje:
systemctl status certbot.timer
 
# Ročni test
certbot renew --dry-run

DNS-01 izziv

Za notranje strežnike ali nadomestne znake:

Cloudflare

# /etc/letsencrypt/cloudflare.ini
dns_cloudflare_api_token = YOUR_API_TOKEN
chmod 600 /etc/letsencrypt/cloudflare.ini
 
certbot certonly \
    --dns-cloudflare \
    --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
    -d example.com \
    -d "*.example.com"

Route53 (AWS)

# AWS poverilnice v ~/.aws/credentials
certbot certonly \
    --dns-route53 \
    -d example.com \
    -d "*.example.com"

Azure DNS

# Z vtičnikom certbot-dns-azure
pip install certbot-dns-azure
 
certbot certonly \
    --authenticator dns-azure \
    --dns-azure-credentials /etc/letsencrypt/azure.ini \
    -d example.com

Kljuke za namestitev

Kljuke se izvršijo po uspešni obnovi.

Ponovni zagon Nginx

# /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
#!/bin/bash
systemctl reload nginx
echo "$(date): Nginx ponovno naložen" >> /var/log/certbot-deploy.log
chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

Ponovni zagon Apache

# /etc/letsencrypt/renewal-hooks/deploy/reload-apache.sh
#!/bin/bash
systemctl reload apache2

Docker vsebnik

# /etc/letsencrypt/renewal-hooks/deploy/docker-reload.sh
#!/bin/bash
docker exec nginx nginx -s reload
# ali
docker-compose restart nginx

Obvestilo

# /etc/letsencrypt/renewal-hooks/post/notify.sh
#!/bin/bash
DOMAINS=$(echo $RENEWED_DOMAINS | tr ' ' '\n')
echo "Obnovljeno: $DOMAINS" | mail -s "Certifikat obnovljen" admin@example.com

Zasebni ACME CA (Step-CA)

Za notranjo PKI s podporo ACME:

# Namestitev Step-CA
wget https://github.com/smallstep/certificates/releases/download/v0.25.0/step-ca_0.25.0_amd64.deb
dpkg -i step-ca_0.25.0_amd64.deb
 
# Inicializacija CA
step ca init --name="Internal CA" --dns=ca.internal.example.com --address=:443

Dodajanje ACME ponudnika:

step ca provisioner add acme --type ACME

Certbot z zasebnim CA:

certbot certonly \
    --server https://ca.internal.example.com/acme/acme/directory \
    --standalone \
    -d internal-server.example.com

Opomba za post-kvantno

Stanje 2024: Protokol ACME in Let's Encrypt še ne podpirata PQ podpisov.

Hibridna strategija:

# 1. ACME certifikat za TLS rokovanje (ECDSA)
certbot certonly --nginx -d example.com
 
# 2. Dodaten PQ certifikat za hibridni način
# (vzporedno preko lastne PKI z WvdS)
// C#: Vzporedno ustvarjanje hibridnega certifikata
using var ecdsa = ECDsa.Create(ECCurve.NamedCurves.nistP384);
var request = new CertificateRequest(
    "CN=example.com", ecdsa, HashAlgorithmName.SHA384);
 
// S PQ razširitvijo za prihodnje odjemalce
var cert = request.CreateSelfSigned(
    DateTimeOffset.UtcNow,
    DateTimeOffset.UtcNow.AddDays(90),
    CryptoMode.Hybrid);

Nadzor

# Dnevniki Certbot
tail -f /var/log/letsencrypt/letsencrypt.log
 
# Preverjanje veljavnosti certifikata
certbot certificates
 
# Prometheus Exporter (cert-exporter)
# Spremlja vse certifikate glede veljavnosti

Odpravljanje napak

Težava Vzrok Rešitev
——–——-———
Challenge failed Vrata 80/443 blokirana Preverite požarni zid
DNS propagation DNS predpomnilnik Počakajte (do 60 min) ali zmanjšajte TTL
Rate limit exceeded Preveč zahtev Uporabite staging strežnik
unauthorized Validacija domene neuspešna Preverite DNS zapise
# Staging strežnik za teste (brez omejitev)
certbot certonly --staging --nginx -d test.example.com
 
# Način za razhroščevanje
certbot certonly --nginx -d example.com --debug

Kontrolni seznam

# Kontrolna točka
—————–
1 DNS/HTTP izziv konfiguriran
2 Certbot nameščen in preizkušen
3 Samodejno podaljšanje aktivirano (Timer)
4 Kljuka za namestitev konfigurirana
5 Nadzor vzpostavljen
6 Obvestilo ob napaki

Povezana dokumentacija


« ← Avtomatizacija | → CI/CD podpisovanje kode »


Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional

Zuletzt geändert: dne 30.01.2026 ob 07:18