Wpis z mikrobloga

Cz 1. Co się dzieje gdy wejdziesz na stronę www?

Jest to pierwsza część tego cyklu w którym będziemy po kolei tłumaczyć co się dzieje behind the scenes gdy w przeglądarce wpisujesz adres www. By trochę uprościć, opiszemy co się dzieje na przykładzie adresu www.allegro.pl

1. Przeglądarka musi znać adres IP serwera by się z nim połączyć i pobrać stronę, czyli: zapytanie DNS

Dla przeglądarki www.allegro.pl to po prostu domena internetowa. Niestety by pobrać stronę, musi dowiedzieć się jaki adres IP ma komputer na którym uruchomiony jest serwer www. Służy do tego DNS czyli serwer nazw domenowych. W uproszczeniu jest to tabela która dla każdej domeny istniejącej w Internecie ma dopisany adres IP. W Internecie jest wiele DNSów, w swojej przeglądarce masz także możliwość ustawienia ich adresów (przykładowy adres serwera DNS to 8.8.8.8 należący do Google). Oznacza to, że zanim przeglądarka wykona żądanie do serwerów Allegro, musi najpierw wykonać zapytanie o ich adres do znanych sobie DNSów.

2. Mamy adres, pobieramy witrynę (czy na pewno?), czyli: zapytanie http GET

HTTP jest to najbardziej znany i najszerzej używany protokół internetowy. "Protokół" czyli pewien zestaw zasad, które mówią jak użytkownicy mają komunikować się z serwerami www. Protokół ten ma kilka rodzajów zapytań i najprostszym z nich jest zapytanie "GET", które oznacza po prostu "Daj mi dokument który znajduję się pod tym adresem"

Po wpisaniu www.allegro.pl i po odpytaniu DNSów o adresy IP serwerów, przeglądarka wysyła zapytanie GET bezpośrednio do serwera.

3. "To nie tutaj, to będzie tam!", czyli o kodach i przekierowaniach słów kilka
W odpowiedzi na zapytanie przeglądarki, serwer zwraca kod statusu zapytania. Jeżeli zapytanie przeglądarki było prawidłowe, to serwer zwraca kod o numerze 200. Jeżeli zapytanie było nieprawidłowe np. adres który podaliśmy nie istnieje, to serwer zwróci słynny kod 404. 

DYGRESJA: Ciekawym przykładem kodu jest kod nr 418 "I'm a Teapot" (Jestem czajniczkiem), który został zaproponowany jako standard z okazji prima aprilis w 1998. Był to kod za pomocą którego można było sterować czajnikiem :) Co ciekawsze, wszystkie popularne serwery www są w stanie taki kod zwrócić. Jak widać easter eggi występują nie tylko w grach ;)

W tym momencie serwer allegro zwraca nam kod 301 "Moved Permanently", czyli "Przeniesiony na zawsze". Protokół HTTP definiuje też tak zwane nagłówki http, w których i przeglądarka i serwer mogą podawać sobie przydatne informacje. I tak w nagłówku do odpowiedzi nr 301 znajduje się nowa lokalizacja strony. W tym wypadku serwer kieruje nas na "http://allegro.pl"

Idziemy więc do "http://allegro.pl". Czy to już? Niestety nie :) Serwer znów zwraca nam kod 301, tym razem podając za lokalizacje "https://allegro.pl"

4. Kłódeczka obok adresu www, czyli o tak zwanym "SSL"

Serwer allegro przekierował nas na zabezpieczoną wersję swojej strony, która używa protokółu https (s na końcu od "secured"), który jest tym samym co http, z tą różnicą, że wszystkie wiadomości wymieniane pomiędzy przeglądarką a serwerem są szyfrowane. To znaczy, że nawet jeśli ktoś będzie w stanie "podsłuchać" naszą komunikację z serwerem allegro, to i tak nic nie odczyta (np. naszych haseł przesyłanych do serwera podczas logowania). Powszechnie na ten mechanizm mówi się "SSL" jednak tak naprawdę SSL to stary protokół, który nie powinien być już używany, obecnie służy do tego TLS który jest następcą SSLa. Nazwa "SSL" jest ciągle stosowana jako określenie szyfrowania w http.

TLS służy nie tylko do szyfrowania. TLS pozwala także potwierdzić autentyczność serwera. Dzięki temu mamy pewność, że serwer allegro jest faktyczne serwerem allegro a nie czymś co się próbuje pod niego podszyć, by wykraść nasze hasła. Robi się to poprzez wydawanie tak zwanych certyfikatów, które zawsze mają "termin ważności". Dlatego czasami możecie zauważyć, że przeglądarka mówi wam, że połączenie jest niezaufane, to najprawdopodobniej dlatego, że certyfikat wygasł i trzeba poprosić o nowy. No właśnie... kogo poprosić?

Aby mieć certyfikat, trzeba go dostać od "zaufanego" źródła. Zaufanego to znaczy takiego któremu ufa i właściciel serwera i któremu ufa przeglądarka.

Gdy allegro ma taki certyfikat, przeglądarka musi go zweryfikować właśnie w tym zaufanym źródle. Wykonuje więc specjalne zapytanie do serwera zaufanego. Innymi słowy wykonuje się tak zwana walidacja certyfikatu.

To już koniec pierwszej części. Mamy już za sobą 4 punkty, a jeszcze nawet nie pobraliśmy strony w html! Wykonaliśmy za to aż 4 zapytania pośrednie (1 do DNSa, 2 do allegro, ale zakończone przekierowaniami i 1 do zaufanego serwera w celu walidacji certyfikatu).

-----------------------------------------
Autor @Emandero
Śledź jego kanał "iStein" w aplikacji Meritum : https://play.google.com/store/apps/details?id=com.meritum

Znasz się dobrze w jakiejś dziedzinie? Chcesz zostać autorem w Meritum? Napisz na PW.

#meritum #gruparatowaniapoziomu #technologia #it #ciekawostki
Pobierz MeritumApp - Cz 1. Co się dzieje gdy wejdziesz na stronę www?

Jest to pierwsza czę...
źródło: comment_BQGD88PTZBtwCP3behSITCv3KYSgZ1vK.jpg
  • 52
@katoda: Jak to? To raczej chyba tak, że adresy serwerów "zaufanych" są wpalone w przeglądarkę ale już sama komunikacja z serwerem w celu uwzględnienia konkretnego certyfikatu musi się odbyć online. Przykłądowo jeśli dziś stworzę stronkę i kupię dla niej certyfikat to skąd twoja przeglądarka zainstalowana w Ciebie ma wiedzieć czy certyfikat jest poprawny?
@TomAss83: certyfikat, który kupujesz, jest podpisany przez wystawcę jako autentyczny. Przeglądarka umie zweryfikować, czy podpis jest poprawny -- klucz publiczny CA jest dystrybuowany z przeglądarką. Do potwierdzenia autentyczności nie jest wymagane zapytanie do CA.

Oczywiście, jeśli klucz prywatny certyfikatu wycieknie, CA może go unieważnić. Przeglądarka może wtedy odpytać CA o listę anulowanych certyfikatów (CLR), ale jeśli np. serwer CA nie działa, to wygaszony certyfikat zostanie zaakceptowany.

Nowszą wersją weryfikacji, czy certyfikat
@katoda Przemyslalem sobie to i masz racje. Powiedz czy dobrze rozumiem. Wystarczy za przegladarka zna tylko klucz publiczny glownego centrum certyfikacji. Wtedy strona ktora chce potwierdzic swoja tozsamosc musi przeslac certyfikaty wszystkich posredniczacych centrow certyfikacji i po kolei weryfikujemy autentycznosc centrum ze stopnia n kluczem publicznym centrum ze stopnia n+1 (zawartym w certyfikacie tego centrum).
Gdy allegro ma taki certyfikat, przeglądarka musi go zweryfikować właśnie w tym zaufanym źródle. Wykonuje więc specjalne zapytanie do serwera zaufanego. Innymi słowy wykonuje się tak zwana walidacja certyfikatu.


@MeritumApp: chwila, a czy walidacja nie polega po prostu na tym ze sprawdzamy czy certyfikat, ktory przedstawil allegro, jest "podpisany" (wzory matematyczne, kryptografia asymetryczna) certyfikatem, ktoremu ufamy? Serio pierwszy raz slysze aby byl wysylany request do jakiegos serwera zaufanego. Jak ten serwer
@MeritumApp: K.rwa, moje ulubione pytanie na rekrutacjach poszło się ciąć. Idź Pan na ch.j i łap plusa.
80% osób kandydujących na stanowisko SysAdmin nie umie poprawnie odpowiedzieć na to pytanie. Inna sprawa, że potem wchodzę w szczegóły :)
Gdy allegro ma taki certyfikat, przeglądarka musi go zweryfikować właśnie w tym zaufanym źródle. Wykonuje więc specjalne zapytanie do serwera zaufanego. Innymi słowy wykonuje się tak zwana walidacja certyfikatu.


@MeritumApp: tak jasne, a na tym serwerze siedzi swistak, ktory odwija certifikat ze sreberka i go potwierdza. Jak sie panowie zabieracie za edukacje to warto by sie samemu, eeee certyfikowac.

Slyszeli o certyfikatach kluczach publicznych i prywatnych? Wydawca certyfikatu kluczem prywatnym (znamym
@MeritumApp: brakuje sporo rzeczy związanych z nowoczesnymi stronami i mechanizmami w przeglądarkach: cache DNS, walidacja CAA, HPKP, QUIC (race pomiędzy TCP a UDP który realizowany jest w Chromie), całe zestawienie i obsługa TLS (session renegotiation, session tickety itp), cache'owanie TLS (HSTS, HSTS Preload), SNI (server name indication), zestawienie parametrów HTTP/2 (negocjacja wielkości słowników w HPACK), obsługa priorytetów strumieni, cały szereg rzeczy związanych z TCP (congestion control).

Plus kilka bzdur: TLS nie
TLS nie potwierdza tożsamości serwera


@pop-corn: to chyba zależy od użytego szyfrowania -- jeśli w certyfikacie znajduje się klucz publiczny potrzebny do przesłania PreMasterSecret, to serwer musi udowodnić, że posiada także klucz prywatny certyfikatu -- inaczej klucz szyfrowania symetrycznego nie będzie się zgadzać.
@pop-corn
Wybacz ale nie trawie sytuacji, gdzie ktoś poświęca pewnie z godzinę na uproszczony, ale wartościowy dla laika opis jakiegoś zagadnienia. Zaraz zlecą się szpanujący swoją wiedzą eksperci (często ograniczającą się do znajomosci haseł i skrótów - nie mówię, że tak jest u Ciebie), którzy wytkną wszelkie braki, nie dorzucając nic sensownego od siebie. Ty przykładowo rzuciłeś kilkoma hasłami nie opisując choćby po łebkach o co w nich chodzi. Wiem że opis