Przejdź do głównej zawartości

Jak działa SSL/TLS z punktu widzenia aplikacji lub przeglądarki – dla programisty

🔐 Cel SSL/TLS

SSL/TLS zapewnia:

  • Poufność – dane są szyfrowane, więc osoba trzecia nie może ich odczytać
  • Integralność – wiadomość nie została zmieniona w drodze
  • Uwierzytelnienie – przeglądarka może sprawdzić, że łączy się z właściwym serwerem

🔄 Proces nawiązywania połączenia TLS (Handshake)

1. Client Hello

Przeglądarka (lub aplikacja) inicjuje połączenie:

Wysyła:

  • client_random – losowy ciąg bajtów, używany później przy generowaniu kluczy
  • Wersję TLS (np. 1.3)
  • Listę obsługiwanych cipher suites – zestawów algorytmów do szyfrowania
  • Rozszerzenia, np. SNI (Server Name Indication) – ujawnia nazwę domeny, do której chce się połączyć
  • Opcjonalnie: key_share – fragment klucza do wymiany klucza szyfrującego (ECDHE)

2. Server Hello

Serwer odpowiada:

  • server_random – kolejny losowy ciąg bajtów, używany przy generowaniu kluczy
  • Wybiera jedną z cipher suites
  • Wysyła certyfikat X.509 – zawiera m.in. nazwę domeny, datę ważności, klucz publiczny
  • Wysyła swój key_share (jeśli TLS 1.3) – do wspólnego obliczenia tajnego klucza
  • Potwierdza nazwę domeny z SNI

Certyfikat X.509 – standardowy format certyfikatu, który zawiera dane właściciela, klucz publiczny oraz podpis wystawcy

3. Weryfikacja certyfikatu

Przeglądarka:

  • Sprawdza, czy certyfikat jest ważny (daty, domena, podpis)
  • Sprawdza łańcuch certyfikatów do zaufanego CA (Certificate Authority) – np. Let's Encrypt, DigiCert
  • Opcjonalnie sprawdza, czy certyfikat nie został odwołany (CRL, OCSP)

CA (Certificate Authority) – zaufany urząd, który wystawia certyfikaty po weryfikacji właściciela

4. Ustalenie klucza sesji

Na podstawie:

  • client_random
  • server_random
  • shared secret – wspólnie uzyskany wynik z algorytmu ECDHE (Elliptic-curve Diffie–Hellman)
    .... . przeglądarka i serwer generują:
  • master secret → z niego wyprowadzają klucze szyfrujące i uwierzytelniające

key_share – publiczna część klucza ECDHE, wykorzystywana do wygenerowania shared secret bez przesyłania go jawnie

shared secret – wspólny sekret, znany tylko przeglądarce i serwerowi, mimo że przesyłane dane nie są tajne (bezpieczne dzięki ECDHE)

5. Finished & szyfrowana komunikacja

  • Obie strony przesyłają zaszyfrowane wiadomości Finished, aby potwierdzić, że handshake zakończył się sukcesem
  • Od tego momentu cała komunikacja jest szyfrowana

🧠 Diagram poglądowy


📌 Kluczowe pojęcia

TerminZnaczenie
client_randomLosowy ciąg bajtów od klienta, używany przy generowaniu kluczy
server_randomLosowy ciąg bajtów od serwera, używany razem z client_random
key_shareFragment publicznego klucza do uzgadniania tajnego shared secret
shared secretSekret wyliczony na bazie key_share, znany tylko przeglądarce i serwerowi
Certyfikat X.509Standardowy certyfikat zawierający tożsamość, klucz publiczny i podpis
CAZaufany urząd certyfikujący – np. Let's Encrypt, który potwierdza tożsamość
TLS 1.3Najnowsza wersja protokołu – uproszczona, bezpieczniejsza niż starsze