HTTPS

HTTP Secure: szyfrowanie SSL/TLS dla komunikacji webowej.

Potrzeba Bezpieczeństwa: Problem Zwykłego HTTP

Pierwotny protokół transferu hipertekstu (HTTP) był rewolucyjny, ale został zaprojektowany w prostszej, bardziej ufnej erze internetu. Jego fundamentalną wadą jest to, że cała komunikacja odbywa się otwartym tekstem. Oznacza to, że wszelkie dane wymieniane między Twoją przeglądarką (klientem) a serwerem strony internetowej są całkowicie nieszyfrowane. To cyfrowy odpowiednik prowadzenia rozmowy na cały głos w zatłoczonym pokoju lub wysyłania pocztówki z danymi bankowymi na odwrocie. Każdy, kto znajduje się w sieci między Tobą a serwerem, na przykład ktoś w tej samej publicznej sieci Wi-Fi, Twój dostawca usług internetowych lub złośliwy atakujący, może z łatwością przechwycić i odczytać ten ruch.

Ten brak prywatności prowadzi do poważnych zagrożeń bezpieczeństwa. Poufne informacje, w tym nazwy użytkowników, hasła, numery kart kredytowych, prywatne wiadomości i historia przeglądania, mogą zostać skradzione. Co więcej, ponieważ dane nie są chronione, są również podatne na modyfikację w locie. Atakujący może przeprowadzić , przechwytując Twoje żądanie i zmieniając odpowiedź serwera w celu wstrzyknięcia złośliwego oprogramowania, wyświetlenia fałszywych treści lub przekierowania Cię na złośliwą stronę. Oryginalny protokół HTTP nie zapewnia żadnego sposobu weryfikacji tożsamości serwera, więc nie masz gwarancji, że strona, z którą myślisz, że rozmawiasz, jest autentyczna. Ta ogromna luka w zabezpieczeniach sprawiła, że niezbędne stało się opracowanie bezpieczniejszej metody komunikacji dla współczesnej sieci.

Wprowadzenie do HTTPS: Bezpieczny Protokół Sieciowy

Rozwiązaniem problemu braku bezpieczeństwa w HTTP jest , co oznacza Hypertext Transfer Protocol Secure (Bezpieczny Protokół Transferu Hipertekstu). Nie jest to fundamentalnie nowy protokół. Jest to raczej ten sam protokół HTTP, z którym jesteśmy zaznajomieni, ale działający przez bezpieczną, zaszyfrowaną warstwę. Tę warstwę bezpieczeństwa zapewnia protokół kryptograficzny o nazwie , następca przestarzałego już SSL (Secure Sockets Layer).

Kiedy przeglądarka łączy się z serwerem za pomocą HTTPS, najpierw ustanawia bezpieczne połączenie TLS. Wszystkie kolejne żądania i odpowiedzi HTTP są następnie szyfrowane i wysyłane przez ten bezpieczny tunel. Takie podejście zapewnia trzy podstawowe warstwy ochrony, które rozwiązują wszystkie główne wady zwykłego HTTP.

  1. Szyfrowanie (Poufność): Dane wymieniane między klientem a serwerem są zaszyfrowane, co czyni je nieczytelnymi dla osób trzecich, które mogłyby je przechwycić. Chroni to prywatność Twojej aktywności przeglądania, danych logowania i informacji osobistych.
  2. Integralność: Dane nie mogą być modyfikowane ani uszkodzone podczas przesyłania bez wykrycia. TLS zawiera mechanizm zapewniający, że odebrana wiadomość jest dokładnie taka sama jak wysłana, co zapobiega manipulacji przez atakujących.
  3. Uwierzytelnianie: Potwierdza, że komunikujesz się z faktyczną, legalną stroną internetową, którą zamierzałeś odwiedzić. Zapobiega to atakom typu man-in-the-middle i buduje zaufanie użytkownika, że nie znajduje się on na fałszywej lub podszywającej się stronie.

Nowoczesne przeglądarki zdecydowanie egzekwują stosowanie HTTPS, wyświetlając ikonę kłódki na pasku adresu i często oznaczając strony inne niż HTTPS jako „Niezabezpieczone”, aby ostrzec użytkowników. Adres URL bezpiecznej witryny zawsze zaczyna się od https://.

Filar 1: Szyfrowanie – Zachowanie Tajemnic

Szyfrowanie to proces konwersji danych z czytelnego formatu (tekst jawny) na zaszyfrowany, niezrozumiały format (szyfrogram). Tylko strony posiadające tajny klucz mogą odszyfrować szyfrogram z powrotem do jego oryginalnej, jawnej postaci. HTTPS używa potężnego hybrydowego systemu szyfrowania, który łączy w sobie najlepsze cechy dwóch typów kryptografii: symetrycznej i asymetrycznej.

Szyfrowanie Symetryczne

W szyfrowaniu symetrycznym ten sam, pojedynczy klucz jest używany zarówno do szyfrowania, jak i deszyfrowania danych. Zarówno nadawca, jak i odbiorca muszą posiadać kopię tego wspólnego tajnego klucza.

  • Zaleta: Jest niezwykle szybkie i wydajne, co czyni je idealnym do szyfrowania dużych ilości danych, takich jak cała strona internetowa czy strumień wideo.
  • Wada: Głównym wyzwaniem jest dystrybucja klucza. Jak bezpiecznie udostępnić tajny klucz między klientem a serwerem, zwłaszcza przez niezabezpieczoną sieć, jaką jest internet? Jeśli podsłuchujący przechwyci klucz podczas jego udostępniania, cały system szyfrowania jest zagrożony.

Szyfrowanie Asymetryczne (Kryptografia Klucza Publicznego)

Szyfrowanie asymetryczne rozwiązuje problem dystrybucji klucza, używając pary matematycznie powiązanych kluczy dla każdej ze stron: klucza publicznego i klucza prywatnego.

  • Klucz publiczny może być swobodnie udostępniany każdemu.
  • Klucz prywatny musi być utrzymywany w tajemnicy przez jego właściciela.
  • Dane zaszyfrowane kluczem publicznym mogą być odszyfrowane tylko przez odpowiadający mu klucz prywatny.
  • Zaleta: Pozwala na rozpoczęcie bezpiecznej komunikacji bez uprzednio udostępnionego sekretu. Klient może pobrać publiczny klucz serwera (który można bezpiecznie przesyłać) i użyć go do zaszyfrowania wiadomości, którą tylko serwer za pomocą swojego klucza prywatnego może odszyfrować.
  • Wada: Jest bardzo intensywne obliczeniowo i znacznie wolniejsze niż szyfrowanie symetryczne. Jest niepraktyczne do szyfrowania dużych ilości danych.

Podejście Hybrydowe w HTTPS

HTTPS łączy te dwie metody, aby uzyskać to, co najlepsze z obu światów. Proces znany jako Uzgadnianie TLS używa powolnego, ale bezpiecznego szyfrowania asymetrycznego wyłącznie w celu bezpiecznego ustanowienia wspólnego klucza tajnego dla szybkiego szyfrowania symetrycznego. Gdy ten wspólny klucz (zwany kluczem sesji) zostanie uzgodniony, wolne szyfrowanie asymetryczne nie jest już używane, a wszystkie rzeczywiste dane aplikacji (żądania i odpowiedzi HTTP) są szyfrowane szybko i wydajnie przy użyciu symetrycznego klucza sesji.

Filar 2: Uwierzytelnianie – Weryfikacja Tożsamości za pomocą Certyfikatów TLS

Szyfrowanie jest świetne, ale jest przydatne tylko wtedy, gdy szyfrujesz dane dla właściwej osoby. Uwierzytelnianie to proces weryfikacji, czy serwer jest tym, za kogo się podaje. Bez niego mógłbyś bezpiecznie szyfrować swoje dane logowania dla fałszywego serwera podszywającego się pod Twój bank. Ta weryfikacja jest osiągana za pomocą certyfikatów cyfrowych, w szczególności certyfikatów TLS/SSL.

Czym jest Certyfikat TLS?

Certyfikat TLS to mały plik danych, który działa jak cyfrowy paszport lub dowód osobisty dla strony internetowej. Jest wydawany przez zaufaną organizację zewnętrzną zwaną . Przed wydaniem certyfikatu, CA przeprowadza proces weryfikacji, aby potwierdzić, że wnioskodawca rzeczywiście posiada i kontroluje nazwę domeny, o którą się ubiega. Certyfikat TLS zawiera kluczowe informacje:

  • Nazwę (nazwy) domeny, na które certyfikat jest wystawiony (np. www.example.com).
  • Organizację, która jest właścicielem domeny.
  • Klucz publiczny serwera. Jest to kluczowa informacja potrzebna do asymetrycznej części szyfrowania podczas uzgadniania TLS.
  • Nazwę wydającego urzędu certyfikacji.
  • Okres ważności certyfikatu (data początkowa i końcowa).
  • Podpis cyfrowy od CA, który dowodzi, że certyfikat jest autentyczny i nie został zmieniony.

Łańcuch Zaufania

Ale skąd Twoja przeglądarka wie, że może ufać Urzędowi Certyfikacji? Tutaj wchodzi w grę koncepcja „łańcucha zaufania”. Dostawcy systemów operacyjnych i przeglądarek (jak Microsoft, Apple, Google, Mozilla) utrzymują listę globalnie zaufanych głównych urzędów certyfikacji (root CAs). Te główne urzędy certyfikacji to wysoce zabezpieczone i intensywnie audytowane organizacje. Certyfikat strony internetowej zazwyczaj nie jest podpisywany bezpośrednio przez główny urząd certyfikacji, ale przez pośredni urząd certyfikacji, którego certyfikat jest z kolei podpisany przez główny urząd.

Kiedy Twoja przeglądarka otrzymuje certyfikat serwera, sprawdza jego podpis. Następnie sprawdza certyfikat urzędu certyfikacji, który go podpisał, i tak dalej, aż dotrze do głównego urzędu certyfikacji, który znajduje się w jej magazynie zaufanych certyfikatów. Jeśli ten łańcuch jest ważny i nieprzerwany, a nazwa domeny w certyfikacie pasuje do domeny, którą odwiedzasz, przeglądarka ufa tożsamości serwera i wyświetla ikonę kłódki.

Filar 3: Integralność – Zapobieganie Manipulacji Danymi

Ostatnim filarem bezpieczeństwa HTTPS jest integralność. Nawet jeśli atakujący nie może odczytać zaszyfrowanych danych, nadal mógłby je przechwycić, zmienić niektóre zaszyfrowane bity i przekazać dalej do odbiorcy. Mogłoby to spowodować nieprzewidywalne błędy lub być wykorzystane w zaawansowanych atakach.

Aby zapewnić integralność danych, TLS używa mechanizmu zwanego , a ostatnio w TLS 1.3, szyfru AEAD (Authenticated Encryption with Associated Data). W uproszczeniu, dla każdej wysyłanej wiadomości, nadawca bierze tekst jawny wiadomości i wspólny tajny klucz sesji i łączy je za pomocą kryptograficznej funkcji skrótu, aby utworzyć krótką, unikalną sygnaturę (MAC). Ten MAC jest następnie wysyłany wraz z zaszyfrowaną wiadomością.

Odbiorca wykonuje ten sam proces w odwrotnej kolejności. Odszyfrowuje wiadomość, a następnie niezależnie oblicza własny MAC na odszyfrowanym tekście jawnym, używając tego samego wspólnego tajnego klucza. Jeśli MAC obliczony przez odbiorcę zgadza się z MAC-em wysłanym przez nadawcę, dowodzi to dwóch rzeczy:

  • Wiadomość nie została zmieniona w tranzycie (Integralność).
  • Wiadomość została utworzona przez kogoś, kto posiada klucz tajny, co uwierzytelnia nadawcę tej konkretnej wiadomości (Autentyczność).

Krok po Kroku: Jak Działa Uzgadnianie TLS (Handshake)

Uzgadnianie TLS to początkowa negocjacja między klientem a serwerem, która ustanawia bezpieczny kanał. Jest to złożony proces, ale można go uprościć do tych głównych kroków:

  1. Client Hello: Klient (Twoja przeglądarka) wysyła do serwera wiadomość `ClientHello`. Ta wiadomość zawiera wersje TLS, które obsługuje, listę algorytmów kryptograficznych (pakietów szyfrów), których może użyć, oraz losowy ciąg bajtów.
  2. Server Hello: Serwer odpowiada wiadomością `ServerHello`. Wybiera najwyższą wersję TLS i najsilniejszy pakiet szyfrów, które obsługują obie strony. Wysyła również własny losowy ciąg bajtów.
  3. Serwer Wysyła Certyfikat: Serwer wysyła swój certyfikat TLS do klienta. Klient może teraz zweryfikować tożsamość serwera, sprawdzając ważność certyfikatu i łańcuch zaufania.
  4. Wymiana Klucza przez Klienta: Po zweryfikowaniu certyfikatu, klient posiada klucz publiczny serwera. Teraz generuje inną losową wartość, sekret zwany "pre-master secret". Klient szyfruje ten pre-master secret za pomocą klucza publicznego serwera i wysyła go do serwera. Tylko serwer, za pomocą swojego klucza prywatnego, może odszyfrować tę wiadomość.
  5. Generowanie Kluczy Sesji: Zarówno klient, jak i serwer posiadają teraz te same trzy losowe wartości (losowa klienta, losowa serwera i pre-master secret). Obie strony używają tych wartości do niezależnego obliczenia tego samego zestawu symetrycznych kluczy sesji (jeden do szyfrowania danych od klienta do serwera, a drugi od serwera do klienta).
  6. Zakończenie Uzgadniania: Klient wysyła wiadomość `Finished`, zaszyfrowaną nowym kluczem sesji. Serwer robi to samo. Jeśli obie strony mogą pomyślnie odszyfrować wiadomość `Finished` od drugiej strony, uzgadnianie jest zakończone.

W tym momencie bezpieczny tunel TLS jest ustanowiony. Obliczeniowo kosztowna kryptografia asymetryczna została zakończona. Wszystkie kolejne dane HTTP mogą być teraz szybko i bezpiecznie przesyłane w obie strony przy użyciu nowo ustanowionych symetrycznych kluczy sesji.

    HTTPS | Teleinf Edu