HostiServer
2026-02-08 13:06:00
SSL/TLS certifikáty: nastavení HTTPS, Let's Encrypt, TLS 1.3
Proč HTTPS není volba, ale nutnost
Web bez HTTPS v roce 2026 je jako obchod bez zámku na dveřích. Prohlížeče takové weby označují jako nebezpečné, Google je snižuje ve vyhledávání a uživatelé prostě odcházejí ke konkurenci.
SSL/TLS certifikát není jen o šifrování. Je o důvěře. Zelený zámek v adresním řádku říká návštěvníkovi: „zde je bezpečné zadat heslo a číslo karty". Bez něj klesá konverze, zejména na eCommerce webech — lidé se bojí zadávat platební údaje.
Chrome, Firefox a další prohlížeče zobrazují varování „Not Secure" pro HTTP weby. Některé firemní sítě zcela blokují přístup k nechráněným zdrojům. A od roku 2018 Google oficiálně používá HTTPS jako faktor hodnocení.
Dobrá zpráva: nastavení SSL/TLS je dnes jednodušší než kdy jindy. Let's Encrypt vydává bezplatné certifikáty, Certbot automatizuje proces a moderní webové servery mají vestavěnou podporu TLS 1.3.
V tomto průvodci probereme: jak funguje TLS 1.3, jak získat bezplatný certifikát přes Let's Encrypt, jak správně nakonfigurovat Nginx a Apache, a co je HSTS a OCSP Stapling — věci, které odlišují základní konfiguraci od profesionální.
SSL vs TLS: jaký je rozdíl
SSL (Secure Sockets Layer) je starý protokol, který se již nepoužívá. Poslední verze SSL 3.0 byla prohlášena za nebezpečnou již v roce 2015 kvůli zranitelnosti POODLE. TLS (Transport Layer Security) je jeho moderní nástupce, který se aktivně vyvíjí.
Termín „SSL" se ujal a používá se jako obecný název. Když lidé říkají „SSL certifikát", ve skutečnosti myslí certifikát pro TLS spojení. To je v pořádku — důležité je pochopit, že ve skutečnosti se používá TLS.
Historie verzí:
- SSL 2.0, 3.0 — zastaralé, nebezpečné, nepoužívat
- TLS 1.0, 1.1 — zastaralé od roku 2020, prohlížeče je nepodporují
- TLS 1.2 — přijatelný pro kompatibilitu se staršími klienty
- TLS 1.3 — doporučený standard od roku 2018, rychlejší a bezpečnější
Jak probíhá spojení (Handshake)
Když uživatel navštíví HTTPS web, dochází k „handshake":
- Client Hello — prohlížeč odesílá seznam podporovaných šifer a verzí TLS
- Server Hello — server odpovídá certifikátem, zvolenou šifrou a svým veřejným klíčem
- Verifikace — prohlížeč ověřuje certifikát přes certifikační autoritu (CA)
- Key Exchange — obě strany generují sdílený session klíč
- Šifrované spojení — veškerý následný provoz je šifrován session klíčem
TLS 1.3 zkrátil tento proces ze dvou „kol" na jedno (1-RTT handshake), což snižuje latenci o 50–100 ms při každém novém spojení. Pro opakovaná spojení je možný dokonce 0-RTT režim.
Proč je TLS 1.3 důležitý
TLS 1.3 není jen „nová verze". Je to významné zlepšení bezpečnosti a rychlosti:
Bezpečnost:
- Odstraněny zastaralé šifry (RC4, DES, MD5)
- Všechna spojení používají Perfect Forward Secrecy
- Méně možností pro downgrade útoky
Rychlost:
- Handshake v 1 RTT místo 2 (rychlejší navázání spojení)
- 0-RTT resumption pro opakovaná spojení
- Méně dat přenášených během handshake
ℹ️ Podpora: K roku 2026 TLS 1.3 podporují všechny moderní prohlížeče (Chrome, Firefox, Safari, Edge) a většina mobilních zařízení. Není důvod ho nepoužívat.
Který certifikát vybrat
Certifikáty se neliší úrovní šifrování (ta je stejná), ale úrovní ověření vlastníka:
| Typ | Ověření | Pro koho | Cena |
|---|---|---|---|
| DV (Domain Validated) | Pouze doména | Blogy, portfolia, malé weby | Zdarma (Let's Encrypt) |
| OV (Organization Validated) | Doména + organizace | Firemní weby, e-shopy | 50–200 $/rok |
| EV (Extended Validation) | Úplné ověření firmy | Banky, platební systémy | 200–500 $/rok |
DV (Domain Validation)
Nejjednodušší typ. Certifikační autorita ověřuje pouze to, že kontrolujete doménu — přes email, DNS záznam nebo HTTP soubor. Vydává se automaticky během minut. Let's Encrypt vydává právě tyto certifikáty.
OV (Organization Validation)
Dodatečně se ověřuje existence organizace: registrační dokumenty, adresa, telefon. Proces trvá 1–3 dny. V certifikátu je uvedeno jméno společnosti — je vidět po kliknutí na zámek v prohlížeči.
EV (Extended Validation)
Nejpřísnější ověření: právní status firmy, fyzická adresa, podpisové právo od oprávněné osoby. Dříve prohlížeče zobrazovaly zelený adresní řádek s názvem firmy, ale od roku 2019 byla tato vizuální odlišnost odstraněna.
Wildcard certifikáty
Pokud máte mnoho subdomén (shop.example.com, blog.example.com, api.example.com, staging.example.com), místo jednotlivých certifikátů můžete získat jeden Wildcard certifikát na *.example.com. Let's Encrypt je vydává zdarma, ale vyžaduje se DNS verifikace.
Důležité: Wildcard pokrývá pouze jednu úroveň subdomén. *.example.com funguje pro shop.example.com, ale ne pro dev.shop.example.com.
Co vybrat?
Pro 90 % projektů stačí bezplatný DV certifikát od Let's Encrypt. Poskytuje stejné šifrování jako placené varianty. Rozdíl je pouze v úrovni ověření organizace — pokud nejste banka a nezpracováváte zvláště citlivá data, není to kritické.
OV má smysl pro firmy, kterým záleží na zobrazení oficiálního názvu v certifikátu. EV — pro finanční organizace a platební systémy, kde je maximální důvěra kritická.
Získání certifikátu přes Certbot
Let's Encrypt je bezplatná certifikační autorita vytvořená v roce 2015 pro popularizaci HTTPS. K roku 2026 vydali přes miliardu certifikátů a obsluhují více než 300 milionů webů.
Certbot je oficiální klient pro práci s Let's Encrypt. Automatizuje získání, instalaci a obnovu certifikátů.
Instalace Certbot
# Ubuntu/Debian
sudo apt update
sudo apt install certbot
# Pro Nginx
sudo apt install python3-certbot-nginx
# Pro Apache
sudo apt install python3-certbot-apache
# CentOS/RHEL
sudo dnf install certbot python3-certbot-nginx
Získání certifikátu pro Nginx
# Automatická konfigurace (doporučeno)
# Certbot sám změní konfiguraci Nginx
sudo certbot --nginx -d example.com -d www.example.com
# Pouze získat certifikát (bez změny konfigurace)
# Užitečné pokud chcete konfigurovat ručně
sudo certbot certonly --nginx -d example.com
# Pro server bez webového serveru (standalone režim)
# Certbot dočasně spustí vlastní server na portu 80
sudo certbot certonly --standalone -d example.com
Získání certifikátu pro Apache
sudo certbot --apache -d example.com -d www.example.com
Wildcard certifikát
Pro Wildcard je vyžadována DNS verifikace (HTTP verifikace není podporována):
sudo certbot certonly --manual --preferred-challenges dns \
-d example.com -d "*.example.com"
Certbot zobrazí TXT záznam, který je třeba přidat do DNS vaší domény. Po přidání stiskněte Enter pro pokračování. Certifikát bude uložen v /etc/letsencrypt/live/example.com/.
Kde jsou certifikáty uloženy
/etc/letsencrypt/live/example.com/
├── cert.pem # Certifikát domény
├── chain.pem # Mezilehlé certifikáty
├── fullchain.pem # cert.pem + chain.pem (použijte tento!)
└── privkey.pem # Privátní klíč
⚠️ Důležité: Certifikáty Let's Encrypt jsou platné 90 dní. Je to záměrné pro bezpečnost — kratší platnost snižuje rizika při kompromitaci klíče. Nezapomeňte nastavit automatickou obnovu (viz sekce níže).
Konfigurace Nginx s TLS 1.3
Základní konfigurace po Certbotu funguje, ale lze ji vylepšit pro maximální bezpečnost a rychlost:
server {
listen 80;
server_name example.com www.example.com;
# Přesměrování HTTP → HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com www.example.com;
# Let's Encrypt certifikáty
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# Moderní protokoly
ssl_protocols TLSv1.2 TLSv1.3;
# Bezpečné šifry (TLS 1.3 používá vlastní automaticky)
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# OCSP Stapling (zrychluje ověření certifikátu)
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
# SSL sessions (snižuje zátěž při opakovaných spojeních)
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# HSTS (vynucený HTTPS)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
# Zbytek konfigurace...
root /var/www/example.com;
index index.html index.php;
}
Po změně konfigurace ověřte a restartujte Nginx:
sudo nginx -t
sudo systemctl reload nginx
Konfigurace Apache s TLS 1.3
# /etc/apache2/sites-available/example.com.conf
# Přesměrování HTTP → HTTPS
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
# SSL nastavení
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
# Moderní protokoly
SSLProtocol -all +TLSv1.2 +TLSv1.3
# Bezpečné šifry
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
# OCSP Stapling
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# HSTS
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
</VirtualHost>
Povolte potřebné moduly a restartujte Apache:
sudo a2enmod ssl headers
sudo a2ensite example.com.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
HSTS: vynucený HTTPS
HSTS (HTTP Strict Transport Security) je HTTP hlavička, která říká prohlížeči: „vždy používej HTTPS pro tento web". I když uživatel zadá http://example.com nebo klikne na starý HTTP odkaz, prohlížeč automaticky přejde na HTTPS bez dotazu na server.
Proč je to důležité:
- Ochrana před SSL stripping útoky — útočník nemůže zachytit první HTTP požadavek a nahradit ho
- Rychlejší spojení — žádné přesměrování přes server, prohlížeč jde přímo na HTTPS
- Uživatel fyzicky nemůže přistoupit přes HTTP — i když velmi chce
- Dodatečná ochrana — v kombinaci s DDoS ochranou vytváří spolehlivý bezpečnostní perimetr
Konfigurace:
# Nginx
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
# Apache
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Parametry:
max-age=63072000— 2 roky v sekundách. Prohlížeč si toto nastavení zapamatuje na 2 rokyincludeSubDomains— aplikovat HSTS na všechny subdoménypreload— umožňuje přidat doménu do vestavěného seznamu prohlížečů (viz hstspreload.org)
HSTS Preload
Je tu jeden problém: při první návštěvě prohlížeč ještě neví o HSTS a dělá běžný HTTP požadavek. Pro uzavření této mezery můžete přidat doménu do HSTS Preload List — vestavěného seznamu v prohlížečích Chrome, Firefox, Safari.
Požadavky pro preload:
- Platný HTTPS na hlavní doméně
- Přesměrování z HTTP na HTTPS
- HSTS hlavička s
max-ageminimálně 1 rok,includeSubDomainsapreload - Všechny subdomény musí také fungovat přes HTTPS
⚠️ Pozor: Po povolení HSTS se ujistěte, že HTTPS funguje správně na všech subdoménách. Pokud vyprší certifikát nebo se něco rozbije — uživatelé se nedostanou na web vůbec, ani přes HTTP. Odstranění z preload listu trvá měsíce.
Automatická obnova certifikátů
Certifikáty Let's Encrypt jsou platné 90 dní. Certbot automaticky vytváří systemd timer nebo cron job pro obnovu, ale lepší je ověřit:
# Kontrola systemd timeru
sudo systemctl status certbot.timer
# Nebo kontrola cronu
cat /etc/cron.d/certbot
Ruční kontrola obnovy
# Testovací spuštění (bez skutečné obnovy)
sudo certbot renew --dry-run
# Vynucená obnova všech certifikátů
sudo certbot renew
Pokud auto-obnova není nastavena
Přidejte do crontab:
# Otevřít crontab
sudo crontab -e
# Přidat řádek (obnova dvakrát denně)
0 0,12 * * * certbot renew --quiet --post-hook "systemctl reload nginx"
--post-hook restartuje Nginx po úspěšné obnově certifikátu.
Ověření konfigurace
Po nastavení nezapomeňte ověřit, že vše funguje správně. Chyby v SSL konfiguraci mohou vést k nedostupnosti webu nebo snížení bezpečnosti.
Online nástroje
SSL Labs Server Test — nejpopulárnější a nejdetailnější služba. Analyzuje:
- Verze protokolů (TLS 1.2, 1.3)
- Podporované šifry a jejich bezpečnost
- Řetězec certifikátů
- Známé zranitelnosti (Heartbleed, POODLE, BEAST)
- Nastavení HSTS, OCSP Stapling
Cíl — získat hodnocení A nebo A+. Konfigurace z tohoto článku dává A+.
Další užitečné služby:
- Hardenize — komplexní kontrola bezpečnosti (SSL, DNS, email)
- Security Headers — kontrola HTTP bezpečnostních hlaviček
- HSTS Preload — kontrola připravenosti na HSTS preload
Ověření z terminálu
# Základní kontrola certifikátu a řetězce
openssl s_client -connect example.com:443 -servername example.com
# Kontrola data vypršení certifikátu
echo | openssl s_client -connect example.com:443 2>/dev/null | \
openssl x509 -noout -dates
# Kontrola podpory TLS 1.3
openssl s_client -connect example.com:443 -tls1_3
# Kontrola podpory TLS 1.2
openssl s_client -connect example.com:443 -tls1_2
# Detailní informace o certifikátu
echo | openssl s_client -connect example.com:443 2>/dev/null | \
openssl x509 -noout -text
Ověření HSTS
curl -I https://example.com 2>/dev/null | grep -i strict
Mělo by vrátit: Strict-Transport-Security: max-age=63072000; includeSubDomains
Ověření přesměrování HTTP → HTTPS
curl -I http://example.com
Mělo by vrátit 301 Moved Permanently s Location: https://example.com/
Časté chyby
- ❌ Mixed Content — některé zdroje se načítají přes HTTP
-
Prohlížeč blokuje HTTP zdroje na HTTPS stránce. Zkontrolujte všechny odkazy na obrázky, skripty, styly. Používejte relativní URL (
/images/logo.png) nebo protokol-nezávislé (//cdn.example.com/script.js). V DevTools prohlížeče záložka Console ukáže všechny problematické zdroje.
- ❌ Certifikát nepokrývá www nebo subdoménu
-
Při získání certifikátu uveďte všechny potřebné domény:
-d example.com -d www.example.com. Nebo použijte Wildcard certifikát pro všechny subdomény.
- ❌ Neúplný řetězec certifikátů (chain)
-
Server musí odeslat nejen svůj certifikát, ale i mezilehlé. Let's Encrypt poskytuje
fullchain.pem— používejte ho, necert.pem.
- ❌ Smyčka přesměrování HTTP ↔ HTTPS
-
Často se stává když webový server i CDN/proxy dělají přesměrování. Ujistěte se, že přesměrování je nastaveno pouze na jednom místě. Pokud používáte Cloudflare — nastavte SSL režim na „Full (strict)".
- ❌ Zapomněli obnovit certifikát
-
Web přestane fungovat, prohlížeče zobrazují děsivé varování. Nastavte auto-obnovu přes Certbot a monitoring data vypršení. Služby jako UptimeRobot mohou upozornit na vypršení certifikátu předem.
🚀 Připraveni vybrat správný hosting?
Flexibilita Cloud (VPS) nebo výkon dedikovaných serverů — řešení která rostou s vámi.
💻 Cloud (VPS) Hosting
- Od 19,95 $/měs — Začněte v malém, škálujte okamžitě
- KVM virtualizace — Garantované zdroje bez oversellingu
- Okamžité upgrady — Bez výpadku
- NVMe úložiště — Rychlý výkon
- 24/7 podpora — <10 min odpověď
🖥️ Dedikované servery
- Od 200 $/měs — Moderní konfigurace
- Vlastní konfigurace — Intel nebo AMD, nejnovější modely
- Více lokalit — EU + USA
- 99,9% uptime — Spolehlivost
- DDoS ochrana — Zahrnuto
- Bezplatná migrace — Pomůžeme
- Private Cloud podpora — Proxmox, VMware, OpenStack
💬 Nejste si jisti kterou variantu potřebujete?
💬 Napište nám a se vším pomůžeme!
Často kladené otázky
- Ovlivňuje SSL rychlost webu?
-
TLS 1.3 přidává minimální latenci (pár milisekund) při prvním spojení. Ale HTTP/2 a HTTP/3, které fungují pouze přes HTTPS, výrazně zrychlují načítání stránek. Výsledkem je, že HTTPS weby jsou obvykle rychlejší.
- Jaký je rozdíl mezi placeným a bezplatným certifikátem?
-
Šifrování je stejné. Rozdíl je v úrovni ověření: DV ověřuje pouze vlastnictví domény, OV/EV ověřují i organizaci. Pro většinu webů je bezplatný Let's Encrypt dostačující.
- Jak přenést certifikát na jiný server?
-
Zkopírujte soubory z
/etc/letsencrypt/live/domain/a/etc/letsencrypt/archive/domain/na nový server. Nebo jednoduše získejte nový certifikát přes Certbot — to je rychlejší.
- Co dělat když SSL Labs ukazuje hodnocení B nebo nižší?
-
Nejčastější příčiny: povolené TLS 1.0/1.1, slabé šifry, chybějící HSTS. Použijte konfiguraci z tohoto článku — dává hodnocení A/A+.
- Potřebuji SSL pro web bez formulářů a plateb?
-
Ano. Google považuje HTTPS za faktor hodnocení. Prohlížeče označují HTTP weby jako nebezpečné. Let's Encrypt je zdarma — není důvod ho nepoužívat.