Sobes.tech
Junior

Jak lze chránit svá data pomocí protokolu HTTPS?

sobes.tech AI

Odpověď od AI

HTTPS používá protokol SSL/TLS k zabezpečení bezpečného spojení mezi klientem a serverem. Toho se dosahuje třemi hlavními mechanismy:

  1. Šifrování: Veškerá přenášená data jsou zašifrována, což je činí nečitelnými pro útočníky zachycující provoz. Používají se algoritmy symetrického a asymetrického šifrování.
  2. Integrita dat: HTTPS zaručuje, že data nebyla během přenosu změněna. K tomu se používají hashovací funkce. Pokud byla data změněna, kontrolní součet při příjmu nebude odpovídat odesílateli.
  3. Ověření: Klient ověřuje pravost serveru pomocí digitálního certifikátu vydaného důvěryhodným certifikačním úřadem (CA). To zabraňuje útokům typu Man-in-the-Middle.

Při navazování spojení HTTPS dochází k handshake:

  • Klient a server se dohodnou na verzi SSL/TLS a sadách šifer.
  • Server pošle klientovi svůj digitální certifikát.
  • Klient ověří certifikát (autenticitu CA, platnost, shodu s doménovým jménem).
  • Klient vygeneruje relanční klíč, zašifruje ho veřejným klíčem serveru (z certifikátu) a odešle serveru.
  • Server dešifruje relanční klíč svým soukromým klíčem.
  • Poté je veškerý provoz mezi klientem a serverem šifrován pomocí tohoto relančního klíče.

Příklad použití HTTPS v Ruby on Rails:

V produkčním prostředí Rails automaticky přesměruje HTTP požadavky na HTTPS, pokud je správně nakonfigurován webový server (Nginx, Apache):

# config/environments/production.rb
# Vynutit veškerý přístup k aplikaci přes SSL, použít Strict-Transport-Security a zabezpečené cookies.
config.force_ssl = true

Na úrovni webového serveru:

# Příklad pro Nginx
server {
    listen 80;
    server_name myapp.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name myapp.com;

    ssl_certificate /path/to/myapp.com.crt;
    ssl_certificate_key /path/to/myapp.com.key;

    # Další nastavení SSL/TLS
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # ... další nastavení serveru (root, location atd.)
}