====== 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}}