Sobes.tech
Middle

Jak jest realizowane szyfrowanie wiadomości między przeglądarką a serwerem?

sobes.tech AI

Odpowiedź od AI

Szyfrowanie między przeglądarką a serwerem odbywa się za pomocą protokołu HTTPS, który jest nakładką na HTTP z użyciem protokołów SSL/TLS (Secure Sockets Layer / Transport Layer Security).

Proces ustanawiania bezpiecznego połączenia (Handshake):

  1. Client Hello: Przeglądarka wysyła do serwera wiadomość zawierającą obsługiwane wersje SSL/TLS, listę zestawów szyfrów (cipher suites), algorytmy kompresji i losową liczbę (od klienta).
  2. Server Hello: Serwer wybiera najlepszą wersję protokołu, zestaw szyfrów i algorytm kompresji spośród proponowanych przez przeglądarkę, generuje własną losową liczbę (od serwera) i wysyła ją do przeglądarki wraz ze swoim certyfikatem SSL/TLS.
  3. Uwierzytelnianie: Przeglądarka weryfikuje certyfikat serwera:
    • Zaufanie do głównego urzędu certyfikacji (Root CA).
    • Ważność certyfikatu.
    • Zgodność nazwy domeny w certyfikacie z adresem strony internetowej.
    • Brak odwołanych certyfikatów na liście (CRL lub OCSP).
  4. Premaster Secret: Przeglądarka generuje losową liczbę (premaster secret), szyfruje ją kluczem publicznym serwera (z certyfikatu) i wysyła do serwera.
  5. Generacja klucza sesji: Zarówno przeglądarka, jak i serwer używają losowych liczb od klienta (Client Random), od serwera (Server Random) i premaster secret do wygenerowania symetrycznego klucza sesji.
  6. Change Cipher Spec: Przeglądarka wysyła do serwera wiadomość informującą o przejściu na użycie wygenerowanego klucza sesji do dalszej komunikacji.
  7. Finished: Przeglądarka wysyła do serwera hash wszystkich poprzednich wiadomości z handshake, zaszyfrowany kluczem sesji. Ta wiadomość potwierdza poprawność handshake.
  8. Change Cipher Spec: Serwer wysyła do przeglądarki wiadomość o przejściu na szyfrowane połączenie.
  9. Finished: Serwer wysyła do przeglądarki hash wszystkich poprzednich wiadomości z handshake, zaszyfrowany kluczem sesji.

Po pomyślnym handshake, cała transmisja danych między przeglądarką a serwerem odbywa się z użyciem szyfrowania symetrycznego opartego na wygenerowanym kluczu sesji. Szyfrowanie symetryczne jest znacznie wydajniejsze od asymetrycznego, co czyni je odpowiednim do szyfrowania dużych ilości danych.

Przykładowe używane algorytmy:

  • Szyfrowanie asymetryczne (do wymiany klucza sesji): RSA, Diffie-Hellman (DH), Elliptic Curve Diffie-Hellman (ECDH).
  • Szyfrowanie symetryczne (do szyfrowania danych): AES, 3DES, ChaCha20.
  • Hashowanie (do sprawdzania integralności wiadomości): SHA-256, SHA-384.