SSL
SSL/TLS certifikát šifruje spojení mezi prohlížečem a serverem. Dnes je povinností — bez něj prohlížeč web označí jako nezabezpečený.
Let’s Encrypt
Certifikáty zdarma, platnost 90 dní, obnovení automatické.
Krátká platnost není nevýhoda. Certbot obnovuje certifikát automaticky každých 60 dní.
Instalace certbotu
Certbot potřebuje port 80 otevřený pro ověření. Zavřený port 80 ve firewallu je nejčastější příčina selhání vydání certifikátu.
Konfigurace nginx
server {
listen 80;
server_name mujweb.cz www.mujweb.cz;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name mujweb.cz www.mujweb.cz;
ssl_certificate /etc/letsencrypt/live/mujweb.cz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mujweb.cz/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}sudo nginx -t
sudo systemctl reload nginxAutomatické obnovení
Certbot si vytvoří systemd timer. Ověř:
systemctl list-timers | grep certbotPo obnovení certifikátu je nutné znovu načíst webserver. Certbot to dělá automaticky přes hook. Pokud používáš vlastní aplikaci, přidej si hook sám:
sudo certbot renew --deploy-hook "systemctl reload nginx"Časté chyby
| Chyba | Příčina |
|---|---|
Timeout during connect | Zavřený port 80 |
DNS problem: NXDOMAIN | Doména nesměruje na server |
Too many certificates already issued | Limit Let’s Encrypt (5 duplicitních certifikátů / týden pro stejnou sadu domén) |
ERR_CERT_COMMON_NAME_INVALID | Certifikát pro jinou doménu |
Při testování používej --dry-run. Ostré vydávání má týdenní limity a rychle
je vyčerpáš.
Wildcard certifikát
Pro *.mujweb.cz je nutné DNS ověření:
sudo certbot certonly --manual --preferred-challenges dns \
-d "*.mujweb.cz" -d mujweb.czTipy
- Přesměruj HTTP na HTTPS, jinak certifikát polovina návštěvníků nevyužije.
- Nezálohuj privátní klíč do gitu. Nikdy.
Poznámka
Cloudflare v proxy režimu nabízí certifikát zdarma bez certbotu — viz Cloudflare.