Klucz do sieci: Jak HTTPS, TLS i certyfikaty chronią Twój cyfrowy świat

 


Ochrona ruchu


DNS to taki system katalogowy dla internetu


DNS - System Nazw Domen jest w istocie usługą katalogową. Jest rozproszonym, globalnym i hierarchicznym systemem, którego zdecentralizowana natura oparta na tysiącach serwerów na całym świecie zapewnia odporność na awarie. Nie istnieje żaden centralny punkt, którego uszkodzenie mogłoby unieruchomić internet. Tłumaczy on przyjazne dla człowieka nazwy domen (np. twojadomena.pl) na numeryczne adresy IP, podobnie jak ludzie wolą używać łatwych do zapamiętania imion zamiast na przykład numerów PESEL, aby się zidentyfikować.


Ludzie wolą nazwy, komputery wolą cyfry


Ludzie również wolą nazywać hosty w Internecie po ich nazwach. Są one łatwe do wymówienia. Przykładem takiej nazwy, nazywanej też identyfikatorem hosta, jest google.com. To coś takiego jak szyld firmy przy konkretnym adresie. Jest to sposób, w jaki rozpoznajemy dany komputer w sieci. Choć w rzeczywistości może to być także wiele komputerów na całym świecie. Oznacza to, że pod jedną nazwą może kryć się wiele hostów. Wiąże się to z równoważeniem obciążenia (ang. Load Balancing). Jest to proces, który rozdziela ruch sieciowy na wiele serwerów, aby zapewnić stabilność i szybkość działania. Nazwa może odpowiadać setkom lub nawet tysiącom serwerów. Istnieje też coś takiego jak CDN, czyli Content Delivery Network, sieć dostarczania treści. Jest ona rozproszoną geograficznie siecią serwerów proxy i centrów danych. Zapewnia wysoką dostępność i wydajność poprzez rozmieszczenie treści w sposób przestrzenny dla użytkowników końcowych. Sieci CDN obsługują znaczną część treści w Internecie. Obsługują choćby sieci społecznościowe. Zaletą jest redukcja kosztów przepustowości i poprawa czasów ładowania stron. 

Warto pamiętać, że hostem mogą być nie tylko serwery – komputer, z którego korzystasz w tym momencie to również host. Nazwy te są łatwe do zapamiętania dla ludzi. Nazwy hostów nie mówią zbyt wiele o geolokalizacji maszyny. Inaczej mówiąc nie dowiemy się za dużo o miejscu, z którym się staramy skomunikować. I tak wp.pl informuje, że prawdopodobnie serwis ten znajduje się na komputerach gdzieś w Polsce. Nazwy hostów mogą składać się z różnej liczby znaków alfanumerycznych. Routery nie myślą takimi kategoriami. Raczej są skupione na przetwarzaniu prostych w swej istocie sygnałów. A te możemy bezproblemowo odwzorować na liczby. Dzięki temu komunikacja jest prosta i efektywna. Adresy IP zazwyczaj składają się z czterech bajtów, czyli z czterech grup po osiem sygnałów. Daje to łącznie 32 bity, gdzie każdy bit to sygnał lub jego brak (reprezentowane jako 1 lub 0).


Adres IP to jak dokładny adres pocztowy


Adresy IP mają strukturę hierarchiczną. Jednym z nich jest na przykład 127.0.0.1. Jak widać ten adres to cztery liczby oddzielone kropkami. To informacja znacznie bardziej precyzyjna niż, powiedzmy, numer telefonu, który sam w sobie niewiele mówi o lokalizacji. Jest to precyzyjny adres pocztowy. Innym przykładem jest adres 8.8.8.8, należący do firmy Google. Analizując adres od lewej do prawej, otrzymujemy coraz bardziej szczegółowe informacje o lokalizacji hosta w sieci. Dzieje się tak, ponieważ adresy te identyfikują lokalizację serwera w globalnej sieci.


Localhost to Twój komputer


Wspomniany wcześniej adres IP, 127.0.0.1, ma specjalne znaczenie – wskazuje on na komputer, z którego właśnie korzystasz. Tym adresem komputer odwołuje się do samego siebie. Jest to tzw. localhost. Taką ma nazwę, przy czym w rzeczywistości cała klasa A sieci 127/8 odwołuje się do komputera lokalnego. Większość osób używa jednak dokładnie tego adresu 127.0.0.1. Alternatywą dla nazwy localhost może być adres localhost.localdomain. Nazwa "localhost" odnosi się zarówno do adresu w standardzie IPv4 (127.0.0.1), jak i jego odpowiednika w IPv6, czyli ::1. Istnieje ważny powód, dla którego zarówno localhost, jak i inne zarezerwowane domeny (takie jak .lan czy .home) są istotne. Ponieważ jeśli strefa localhost jest źle skonfigurowana, komputer odpyta serwery domeny głównej o informacje dotyczące siebie samego. Localhost jest filarem komunikacji sieciowej. Zanim jakakolwiek informacja opuści lokalną maszynę i przeniesie się do globalnego internetu, znajduje się w tym mikrokosmosie sieciowym.

Jakie są główne takie najbardziej podstawowe protokoły sieciowe?


HTTP to protokół dla stron internetowych


Działa na porcie 80 z reguły, choć oczywiście niekoniecznie. Możemy też ustawić inny port dla serwera usługi HTTP, ale również zapora sieciowa może obsłużyć dowolny inny port. Przeglądarka internetowa natomiast domyślnie działa na porcie 80. Jest to standardowy i ogólnie przyjęty port dla tego typu komunikacji. Przeglądarki internetowe używają go po prostu automatycznie, gdy w adresie URL nie podano innego portu. Jeśli chcemy połączyć się z serwerem HTTP działającym na niestandardowym porcie, w pasku adresu przeglądarki należy podać ten port po adresie hosta, oddzielając go dwukropkiem. Np. http://example.com:8080. Gdybyśmy tę zależność mieli zilustrować budynkiem. Można do niego wejść przez różne drzwi – główne lub boczne, o ile są otwarte. Wszystkie te 'drzwi' działają w ramach protokołu TCP, który jest jak niezawodna firma kurierska dbająca, żeby wszystkie dane dotarły do budynku w całości. Port 80, to jakby główne drzwi do budynku. Protokół http musi oczywiście działać na portach protokołu TCP. Serwer http również może być skonfigurowany do nasłuchiwania na dowolnym porcie. Jaki jest więc cel tej umowy, że to właśnie port 80 jest standardem? Jaki jest cel tej umowy? Celem tej umowy jest oczywiście prosta i niezawodna komunikacja. 


Porty to jak numery mieszkań


Adres IP jest jakby adres na ulicy i numer bloku, domu do którego chcemy się dostać. Z kolei numer portu mówi do której aplikacji dokładnie chcemy się dostać. Czyli do którego mieszkania, czy też pokoju, jeśli mówimy o domu. Bez numeru portu pakiet dociera do komputera, ale komputer nie wie, co z nim zrobić. Dlatego też konwencjonalnie wybierany jest jeden port, w tym wypadku 80. Gdyby każda strona internetowa miała używać losowego portu mielibyśmy kompletny chaos. Jeśli jednak chcemy testować jakąś stronę internetową w domyśle używamy portu 8080 lub 3000. Te umowy to po prostu swego rodzaju konwencja, która upraszcza całe zadanie przekazywania informacji. Zapobiega to konfliktom między usługami. Umożliwia sensowną konfigurację zapór ogniowych (firewall). Przeglądarki wiedzą gdzie łączyć się domyślnie. Jak podaje organizacja IANA na swojej stronie https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml nazwy usług i numery portów służą do rozróżniania różnych usług działających w ramach protokołów transportowych, takich jak UDP, TCP i inne. Nazwy usług są przypisywane zgodnie z zasadą „kto pierwszy ten lepszy”. Zasadę tę opisuje dokument RFC 6335 ( https://www.rfc-editor.org/rfc/rfc6335.html ).Prowadzi to do wniosku, że port 80 musiał zostać przypisany protokołowi HTTP bardzo wcześnie. Rzeczywiście, miało to miejsce na samym początku istnienia World Wide Web, czyli w latach 1990-1992. Warto dodać, że wybrano numer 80, ponieważ port 79 był już zajęty przez protokół FINGER https://wirekat.com/the-almost-interesting-history-of-port-numbers/

Czym jednak w zasadzie jest port w kontekście, o którym mówimy?

Jest to po prostu numer przypisany do określonego protokołu. Wirtualny punkt końcowy komunikacji używany do połączeń sieciowych. Różne porty znajdują się w oprogramowaniu działającym na maszynach, tzn. oprogramowaniu służącym do łączenia się przez Internet. Dysponując ogromną ilością danych chcielibyśmy umieć je jakoś rozróżnić. Dzięki portom łatwo można uporządkować różne rodzaje ruchu. Komputer wie wtedy, co zrobić z danymi otrzymanymi lub wysłanymi przez to samo połączenie sieciowe. 


Port 80 = niezabezpieczony ruch


Należy podkreślić kluczową kwestię: komunikacja przez port 80 za pomocą protokołu HTTP jest niezabezpieczona. Oznacza to, że wszystkie przesyłane dane, takie jak loginy i hasła, mają formę zwykłego tekstu, który może zostać łatwo przechwycony. Aby rozwiązać ten fundamentalny problem, wprowadzono bezpieczną wersję protokołu: HTTPS (Hypertext Transfer Protocol Secure).

Współcześnie HTTPS nie jest już tylko domeną banków czy sklepów internetowych, ale stał się absolutnym standardem dla każdej nowoczesnej strony internetowej. Jego obecność to sygnał dla użytkownika, że właściciel witryny dba o jego prywatność i bezpieczeństwo, co jest fundamentem zaufania w internecie. Dlatego tak ważne jest, aby zawsze zwracać uwagę na symbol kłódki i unikać podawania wrażliwych danych na stronach, które go nie posiadają.


HTTPS to bezpieczna wersja HTTP


Port 443 jest standardowym portem TCP używanym przez protokół HTTPS, który pozwala na bezpieczne szyfrowanie ruchu dzięki SSL/TLS. Dane użytkowników są chronione w trakcie przesyłania, dzięki czemu nie można ich podsłuchać. 


Źródło obrazu: https://www.ssl2buy.com/wiki/port-443


HTTPS chroni Twoje dane


Z powodu zagrożeń takich jak, atak typu man-in-the-middle, czyli atak, w których cyberprzestępca przechwytuje komunikację między dwiema stronami, aby podsłuchiwać lub modyfikować tę komunikację bez wiedzy uczestników - właściciele stron internetowych ze wszystkich części świata przeszli na protokół HTTPS. A jak działa ten protokół?  Ma on dodatkową literę “S”, co oznacza, że jest to zabezpieczona wersja protokołu HTTP. Za każdym razem, gdy przeglądarka wysyła poufne informacje do serwera bezpieczeństwo ma zasadnicze znaczenie. Z tego powodu korzysta się z zabezpieczonych kanałów komunikacyjnych. Celem jest utrudnienie intruzom odczytania lub niewłaściwego wykorzystania danych. Komunikacja w takim bezpiecznym kanale odbywa się na zasadzie szyfrowania za pomocą algorytmów tekstu, a następnie wysłania do serwera zaszyfrowanego tekstu. Serwer wykonuje operację odszyfrowywania i działa to w dwie strony. Tak, więc HTTPS pomaga zapewnić bezpieczeństwo poprzez bezpieczne połączenie przeglądarki lub aplikacji z odwiedzanymi witrynami internetowymi. Technologia ta chroni przed podsłuchiwaczami i hakerami, którzy próbują podszywać się pod zaufane strony internetowe. Zapewnia, więc integralność danych. Integralność,  a więc całkowitość, nienaruszalność. Co jest osiągane głównie dzięki zastosowaniu funkcji skrótu, funkcji mieszającej, inaczej funkcji haszującej. Czyli tzw. skrótu nieodwracalnego. (Więcej informacji pod tym linikiem: https://en.wikipedia.org/wiki/Hash_function). HTTPS jest tak naprawdę warstwą szyfrowania nałożoną na standardowy protokół HTTP (tzw. nakładka TLS). To TLS jest odpowiedzialne za poufność i integralność. Podczas uzgadniania połączenia, tzw. handshake TLS, klient i serwer negocjują zestaw szyfrów. szyfry obejmują między innymi algorytm do zapewniania integralności choćby SHA-256. (Więcej informacji pod tym linikiem: https://en.wikipedia.org/wiki/Sha-256). Funkcja skrótu bierze dowolny duży blok danych i generuje na jego podstawie stałej długości hash. Nawet najmniejsza modyfikacja danych wejściowych powoduje lawinową i nieprzewidywalną zmianę wynikowego skrótu. Proces zapewniania integralności i szyfrowania danych jest połączony. Przed wysłaniem fragment danych jest szyfrowany. Dla zaszyfrowanej wiadomości wysyłany jest kod MAC. Przeglądarka otrzymuje zaszyfrowane dane i dołączony kod MAC. Odszyfrowuje dane. I samodzielnie oblicza na podstawie danych kod MAC. Porównuje go następnie z tym, który otrzymała jeśli oba są identyczne znaczy to, że dane nie zostały zmienione. To działa trochę na zasadzie zapieczętowanej koperty na listy. Jest ona nieprzezroczysta, więc nikt nie może odczytać listu przed odpieczętowaniem. A jeśli ktoś ją po drodze odpieczętuje nie będzie mógł na pewno przywrócić pieczęci do początkowego stanu.


Bezpieczeństwo to kwestia klucza


Mówiąc bardziej precyzyjnie, bezpieczeństwo systemu kryptograficznego musi zależeć wyłącznie od tajności klucza, a nie od tajności algorytmu. Projektanci protokołu TLS (który stanowi podstawę HTTPS) zakładają, że haker doskonale zna wszystkie używane algorytmy szyfrujące (jak AES, ChaCha20), funkcje skrótu (jak SHA-256) i szczegóły działania protokołu. Mimo to system pozostaje bezpieczny. Ponieważ samo poznanie algorytmu jest bezużyteczne bez jednego, kluczowego elementu: klucza sesyjnego. Haker nie zna klucza sesyjnego.

Najważniejszą tajemnicą, która chroni komunikację, jest losowo wygenerowany klucz symetryczny (tzw. klucz sesyjny), używany do szyfrowania danych w danej sesji. Ten klucz jest uzgadniany na początku każdej nowej sesji TLS w procesie zwanym "uzgadnianiem klucza" (key exchange), np. przy użyciu algorytmu Diffie-Hellman lub RSA. Nawet jeśli haker podsłuchuje całą wymianę klucza, nowoczesne metody (jak Diffie-Hellman w oparciu o krzywe eliptyczne - ECDHE) są zaprojektowane tak, aby z podsłuchanych danych niemożliwe było matematyczne wyprowadzenie wspólnego, uzgodnionego klucza sesyjnego. 


Certyfikaty cyfrowe to dowód tożsamości


Nawet znając algorytm, haker nie może skutecznie podmienić klucza podczas uzgadniania, ponieważ cały proces jest uwierzytelniany za pomocą certyfikatów cyfrowych. Serwer przedstawia przeglądarce swój certyfikat, który jest podpisany cyfrowo przez zaufany urząd certyfikacji (CA). Przeglądarka weryfikuje ten podpis. Jeśli haker spróbuje wysłać swój własny, fałszywy klucz, przeglądarka nie zweryfikuje go poprawnie (ponieważ certyfikat hakera nie będzie podpisany przez zaufany urząd CA) i natychmiast przerwie połączenie, wyświetlając użytkownikowi poważne ostrzeżenie (np. NET::ERR_CERT_AUTHORITY_INVALID). 

Co zrobić, jak wyskoczy błąd certyfikatu?


Co wtedy robić? Przeładować stronę. Zrestartować router. Zrestartować komputer. Wypróbować tryb incognito, żeby sprawdzić, czy strona działa bez ciasteczek. Wykasować rozszerzenia w przeglądarce, które mogą sprawiać problem. Sprawdzić, czy certyfikat nie wygasł.

Sprawdzić i zaktualizować zegar komputera. 

Robimy to w ten sposób, że klikamy prawym przyciskiem na datę i godzinę następnie wybieramy Dostosuj datę i godzinę. Pojawia nam się miejsce w ustawieniach systemu, w którym naciskamy Synchronizuj teraz. Na niektórych witrynach pojawi się opcja kontynuowania ręcznego i tego raczej na pewno nie należy robić. Za to warto wyczyścić pamięć podręczną przeglądarki i pliki cookie. Możesz też też wyczyścić stan SSL. Zmienić serwer DNS lub

wyłączyć tymczasowo VPN i ochronę antywirusową. Importować i eksportować certyfikaty. Zaktualizować system operacyjny. No właśnie, a czym jest SSL, który został tu wymieniony?

TLS: Bezpieczny następca SSL

TLS (Transport Layer Security) to protokół sieciowy, który stał się globalnym standardem szyfrowania komunikacji w Internecie. Jest on bezpieczniejszym i nowocześniejszym następcą swojego poprzednika, SSL (Secure Sockets Layer), zaprojektowanym tak, by naprawić jego luki w zabezpieczeniach. Chociaż cel obu protokołów jest ten sam – uwierzytelnienie i szyfrowanie połączeń w celu bezpiecznego przesyłania danych – różnią się one w działaniu.

Wszystkie wersje SSL są dziś uznawane za przestarzałe i niebezpieczne. Mimo to, z siły przyzwyczajenia, termin "SSL" wciąż jest potocznie używany do opisywania nowoczesnych połączeń, które w rzeczywistości zabezpiecza już TLS. Kluczowa różnica między nimi leży m.in. w procesie tzw. "handshake" (uzgadniania połączenia). W TLS jest on znacznie bardziej wydajny, wymaga mniej kroków i korzysta z nowocześniejszych algorytmów kryptograficznych niż jego odpowiednik w SSL.

Globalny trend: Internet w pełni szyfrowany

Jak zauważa Google, na drodze do osiągnięcia pełnego szyfrowania całego ruchu internetowego wciąż stoi kilka wyzwań, zarówno technicznych, jak i politycznych. Niektóre kraje i organizacje aktywnie blokują lub obniżają jakość ruchu HTTPS. Części firm z kolei brakuje zasobów technicznych lub finansowych na wdrożenie tego protokołu, a inne nie postrzegają tego jako priorytetu.

Mimo tych przeszkód, postęp w adaptacji HTTPS na przestrzeni lat jest niezaprzeczalny, co doskonale ilustrują dane z Google Transparency Report dotyczące odsetka wczytywanych stron przez HTTPS:

System Operacyjny

Lipiec 2016

Wrzesień 2025

Windows

68%

96%

Android

36%

99%

ChromeOS

70%

99%

Mac

69%

98%

Linux

80%

88%

Źródło: https://transparencyreport.google.com/https/overview?hl=en


Komentarze