🟢 Beginner

TLS/SSL — Šifrovanie a certifikáty

TLS (Transport Layer Security) zabezpečuje komunikáciu na internete. Keď vidíš HTTPS, znamená to, že spojenie je šifrované cez TLS. SSL je starší predchodca — dnes sa používa výlučne TLS, ale názov SSL prežíva v bežnej reči.


Ako funguje TLS?

TLS handshake prebieha pri každom novom spojení:

  1. Client Hello — klient pošle podporované cipher suites a TLS verziu
  2. Server Hello — server vyberie cipher suite a pošle svoj certifikát
  3. Overenie certifikátu — klient overí reťaz dôvery (certificate chain)
  4. Key exchange — dohodnutie symetrického kľúča (ECDHE)
  5. Šifrovaná komunikácia — všetky dáta sú šifrované

TLS 1.3 zjednodušil handshake na 1-RTT (jedno roundtrip), čím sa výrazne zrýchlil.

Certificate Chain

Certifikáty tvoria reťaz dôvery:

Root CA (v prehliadači/OS)
  └── Intermediate CA
        └── Server certifikát (tvoja doména)
# Overenie certifikátu
openssl s_client -connect example.com:443 -showcerts

# Zobrazenie detailov certifikátu
openssl x509 -in cert.pem -text -noout

# Overenie expirácie
openssl x509 -in cert.pem -enddate -noout
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates

Let's Encrypt — Bezplatné certifikáty

Let's Encrypt demokratizoval HTTPS. Certbot je najpoužívanejší klient:

# Inštalácia certbotu
apt install certbot python3-certbot-nginx

# Získanie certifikátu pre Nginx
certbot --nginx -d example.com -d www.example.com

# Len certifikát (bez konfigurácie webservera)
certbot certonly --standalone -d example.com

# Wildcard certifikát (vyžaduje DNS challenge)
certbot certonly --dns-cloudflare -d "*.example.com" -d example.com

# Automatická obnova (certbot timer)
certbot renew --dry-run
systemctl enable certbot.timer

mTLS — Obojstranná autentifikácia

Štandardný TLS overuje len server. mTLS (mutual TLS) overuje aj klienta — bežné v microservices a zero-trust architektúrach:

# Generovanie klientského certifikátu
openssl req -newkey rsa:2048 -nodes -keyout client.key -out client.csr
openssl x509 -req -in client.csr -CA ca.pem -CAkey ca-key.pem -out client.pem

# Nginx konfigurácia pre mTLS
# ssl_client_certificate /etc/nginx/ca.pem;
# ssl_verify_client on;

# Testovanie s curl
curl --cert client.pem --key client.key https://api.example.com

HSTS — Vynútenie HTTPS

HSTS (HTTP Strict Transport Security) hovorí prehliadaču, aby vždy používal HTTPS:

# Nginx header
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
  • max-age — ako dlho si prehliadač pamätá (31536000 = 1 rok)
  • includeSubDomains — platí aj pre subdomény
  • preload — zaradenie do preload listu prehliadačov (hstspreload.org)

Best Practices

  • Len TLS 1.2+ — zakáž TLS 1.0 a 1.1, ideálne len TLS 1.3
  • Automatická obnova certifikátov — Let's Encrypt expiruje za 90 dní
  • HSTS preload — po dôkladnom testovaní aktivuj preload
  • CAA záznamy v DNS — obmedz, kto môže vydať certifikát pre tvoju doménu
  • Monitoruj expiráciu — alerting 14+ dní pred expriáciou
  • Silné cipher suites — ECDHE + AES-GCM, žiadne CBC alebo RSA key exchange
  • OCSP stapling — rýchlejšie overenie certifikátu

TLS nie je voliteľný — je povinný. Každá služba vystavená do internetu musí byť šifrovaná.