-
Notifications
You must be signed in to change notification settings - Fork 0
Certifikaty a Lets Encrypt
Certifikáty zdarma, automaticky obnovované. Většinu práce udělá Caddy nebo Traefik sám — tahle stránka je pro případy, kdy to nefunguje nebo kdy si to děláš ručně.
Jak certifikáty fungují je v TLS a HTTPS.
Let's Encrypt ověřuje, že doména patří tobě, a pak vystaví certifikát na 90 dní. Protokolu se říká ACME.
Ověření má dvě podoby a rozdíl mezi nimi je nejdůležitější věc na téhle stránce.
HTTP-01 — server ti pošle náhodný řetězec a ty ho musíš vystavit na http://tvoje-domena.cz/.well-known/acme-challenge/.... Let's Encrypt si pro to sáhne.
DNS-01 — vytvoříš TXT záznam v DNS. Let's Encrypt se na něj podívá.
| HTTP-01 | DNS-01 | |
|---|---|---|
| Potřebuje otevřený port 80 zvenku | ano | ne |
| Funguje za CGNATem | ne | ano |
Umí wildcard *.example.cz
|
ne | ano |
| Potřebuje API klíč k DNS | ne | ano |
| Nastavení | jednodušší | složitější |
Wildcard jde jen přes DNS-01. To je nejčastější důvod, proč lidé přecházejí — jeden certifikát pro *.example.cz místo dvaceti jednotlivých.
DNS-01 funguje i pro vnitřní služby, které nejsou z internetu dostupné vůbec. Můžeš mít platný certifikát pro nas.example.cz, které ukazuje na 192.168.1.10. Pro homelab je to elegantní řešení, jak mít všude zelený zámeček bez vlastní certifikační autority.
Když nepoužíváš Caddy ani Traefik:
apt install certbot python3-certbot-nginx
# s automatickou úpravou konfigurace nginxu
certbot --nginx -d example.cz -d www.example.cz
# jen certifikát, konfiguraci si napíšu sám
certbot certonly --webroot -w /var/www/html -d example.czCertifikáty skončí v /etc/letsencrypt/live/example.cz/:
-
fullchain.pem— certifikát včetně mezilehlých, tenhle chceš -
privkey.pem— soukromý klíč -
cert.pem— jen certifikát bez řetězu, nepoužívej
To rozlišení fullchain versus cert je klasická past. Když použiješ cert.pem, web bude fungovat v prohlížeči a selhávat v curl a na mobilech, protože chybí mezilehlý certifikát. Viz TLS.
apt install python3-certbot-dns-cloudflare
echo "dns_cloudflare_api_token = tvuj_token" > /root/cf.ini
chmod 600 /root/cf.ini
certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /root/cf.ini \
-d example.cz -d '*.example.cz'Token vytvoř s oprávněním pouze Zone:DNS:Edit pro konkrétní doménu. Nikdy globální API klíč — ten dává plný přístup k účtu.
Pluginy existují pro většinu poskytovatelů: Cloudflare, DigitalOcean, deSEC, Hetzner, Wedos.
Certbot si nainstaluje časovač sám:
systemctl list-timers | grep certbot
certbot renew --dry-run # zkouška nanečistoObnovuje se, když zbývá míň než 30 dní. Zkoušej --dry-run po každé změně konfigurace, jinak se o problému dozvíš až za dva měsíce, když ti web spadne.
Po obnově se musí služba znovu načíst:
certbot renew --deploy-hook "systemctl reload nginx"Let's Encrypt má omezení a dá se do nich narazit při ladění:
- 50 certifikátů týdně na registrovanou doménu
- 5 neúspěšných ověření za hodinu
- 5 duplicitních certifikátů týdně
To poslední kousne, když ti Caddy nebo Traefik při každém restartu žádá znovu, protože nemá trvalé úložiště. Zablokuje tě to na týden.
Při ladění používej testovací prostředí:
certbot certonly --dry-run ...# Caddy
acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
# Traefik
- --certificatesresolvers.le.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directoryTestovací certifikáty prohlížeč neuzná, ale ověříš si, že celý proces projde.
Pro služby bez veřejné domény máš tři možnosti.
DNS-01 s veřejnou doménou ukazující na vnitřní adresu. Nejjednodušší a certifikát je plnohodnotný. Nevýhoda: vnitřní jména se objeví ve veřejných logech certifikační transparentnosti.
Vlastní certifikační autorita. Caddy to umí jedním řádkem (tls internal), nebo si postav step-ca. Musíš pak kořenový certifikát rozvézt na všechna zařízení — a narazíš na to, že aplikace na Androidu ho stejně neuznají. Podrobně i se skripty ve vlastní certifikační autoritě.
Certifikáty podepsané sebou samým. Nejrychlejší, nejotravnější. Varování v prohlížeči navždy.
Pro homelab je nejlepší ta první možnost — kup si doménu za dvě stovky ročně a máš klid.
certbot certificates # co mám a do kdy platí
openssl x509 -in fullchain.pem -text -noout
openssl s_client -connect example.cz:443 -servername example.cz < /dev/null| Problém | Příčina |
|---|---|
| „Timeout during connect" | port 80 není zvenku dostupný |
| „DNS problem: NXDOMAIN" | doména nesměřuje sem, nebo se změna nerozšířila |
| „too many certificates" | narazil jsi na limit, čekej týden |
| Wildcard nejde | používáš HTTP-01, musíš DNS-01 |
| Funguje v prohlížeči, ne v curl | použil jsi cert.pem místo fullchain.pem
|
Našel jsi chybu nebo něco chybí? Založ issue nebo pošli pull request. — Psáno 2026, licence CC BY-SA 4.0
Základy
- Cesta paketu
- Vrstvy a zapouzdření
- MAC, ARP a přepínání
- Prefixy a masky
- Směrování
- DHCP a DNS
- Porty a spojení
- NAT a port forwarding
Domácí síť
IPv6
Linux firewall
TLS a reverse proxy
- TLS a HTTPS
- HTTP, QUIC a WebSocket
- Reverse proxy
- Caddy
- Nginx
- Traefik
- Certifikáty a Let's Encrypt
- Vlastní certifikační autorita
Kryptografie
- Stavební kameny
- Veřejný a soukromý klíč
- Diffie-Hellman
- Hashe, HMAC a podpisy
- Náhodnost a entropie
- TLS handshake
- Postkvantová kryptografie
- Šifrování disků a souborů
Virtualizace a kontejnery
Diagnostika
Vzdálený přístup
Provoz a bezpečnost
Praxe