====== 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 =====
* [[.:scheduled-renewal|Načrtovana obnova]] – Alternativa brez ACME
* [[..:monitoring:ablauf-monitoring|Nadzor veljavnosti]] – Spremljanje certifikatov
* [[sl:int:pqcrypt:szenarien:tls:start|TLS/mTLS]] – Konfiguracija strežnika
----
<< [[.:start|← Avtomatizacija]] | [[.:cicd-code-signing|→ CI/CD podpisovanje kode]] >>
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//
{{tag>acme letsencrypt certbot automatisierung operator}}