Sobes.tech
Junior

Ako môžete chrániť svoje údaje pomocou protokolu HTTPS?

sobes.tech AI

Odpoveď od AI

HTTPS používa protokol SSL/TLS na zabezpečenie chráneného spojenia medzi klientom a serverom. To sa dosahuje tromi hlavnými mechanizmami:

  1. Šifrovanie: Všetky prenášané údaje sú šifrované, čo ich robí nečitateľnými pre útočníkov zachytávajúcich prenos. Používajú sa algoritmy symetrického a asymetrického šifrovania.
  2. Integrita dát: HTTPS zaručuje, že údaje neboli počas prenosu zmenené. Na tento účel sa používajú hashovacie funkcie. Ak boli údaje zmenené, hashová suma pri prijatí nebude zodpovedať odosielateľovej hashovej sume.
  3. Autentifikácia: Klient overuje pravosť servera pomocou digitálneho certifikátu vydaného dôveryhodným certifikačným centrom (CA). To zabraňuje útokom typu Man-in-the-Middle.

Pri nadväzovaní spojenia HTTPS prebieha handshake:

  • Klient a server sa dohodnú na verzii SSL/TLS a sadách šifrov.
  • Server odošle klientovi svoj digitálny certifikát.
  • Klient overí certifikát (dôveryhodnosť CA, platnosť, zhoda s doménovým menom).
  • Klient vygeneruje reléčný kľúč, zašifruje ho verejným kľúčom servera (z certifikátu) a odošle ho serveru.
  • Server dešifruje reléčný kľúč svojím súkromným kľúčom.
  • Následne je celý prenos medzi klientom a serverom šifrovaný použitím tohto reléčneho kľúča.

Príklad použitia HTTPS v Ruby on Rails:

V produkčnom prostredí Rails automaticky presmeruje HTTP požiadavky na HTTPS pri správnej konfigurácii webového servera (Nginx, Apache):

# config/environments/production.rb
# Vynúti všetky prístupy k aplikácii cez SSL, použije Strict-Transport-Security a zabezpečené cookies.
config.force_ssl = true

Na úrovni webového servera:

# Príklad pre 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;

    # Ďalšie nastavenia SSL/TLS
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # ... ostatné nastavenia servera (root, location a pod.)
}