Przeczytałem mnóstwo dokumentacji związanej z tym problemem, ale nadal nie mogę zebrać wszystkich elementów razem, więc chciałbym zadać kilka pytań.
Przede wszystkim opiszę pokrótce procedurę uwierzytelniania, tak jak ją rozumiem, ponieważ mogę się w tym zakresie pomylić: Klient rozpoczyna połączenie, na które serwer odpowiada kombinacją klucza publicznego, metadanych i podpisu cyfrowego zaufany organ. Następnie klient podejmuje decyzję, czy ufa serwerowi, szyfruje jakiś losowy klucz sesji kluczem publicznym i odsyła go. Ten klucz sesji można odszyfrować tylko za pomocą klucza prywatnego przechowywanego na serwerze. Serwer robi to, a następnie rozpoczyna się sesja HTTPS.
Tak więc, jeśli mam rację powyżej, pytanie brzmi, jak atak man-in-the-middle może wystąpić w takim scenariuszu? Chodzi mi o to, że nawet jeśli ktoś przechwyci odpowiedź serwera (np. Www.server.com) kluczem publicznym i ma jakieś środki, aby pomyśleć, że jest on www.server.com, nadal nie byłby w stanie odszyfrować mojego klucza sesji bez klucza prywatnego.
Mówiąc o wzajemnym uwierzytelnianiu, czy chodzi o zaufanie serwera do tożsamości klienta? To znaczy klient może już być pewien, że komunikuje się z odpowiednim serwerem, ale teraz serwer chce się dowiedzieć, kim jest klient, prawda?
I ostatnie pytanie dotyczy alternatywy dla wzajemnego uwierzytelniania. Jeśli w opisanej sytuacji występuję jako klient, co jeśli wyślę login / hasło w nagłówku HTTP po nawiązaniu sesji SSL? Z mojego punktu widzenia ta informacja nie może zostać przechwycona, ponieważ połączenie jest już zabezpieczone i serwer może na nich polegać w celu mojej identyfikacji. Czy się mylę? Jakie są wady takiego podejścia w porównaniu z uwierzytelnianiem wzajemnym (ważne są tylko kwestie bezpieczeństwa, a nie złożoność implementacji)?
źródło
Serwer odpowiada za pomocą łańcucha certyfikatów X.509 i podpisu cyfrowego podpisanego własnym kluczem prywatnym.
Poprawny.
Nie. Klient i serwer uczestniczą we wspólnym procesie generowania klucza sesji, w wyniku czego sam klucz sesji nigdy nie jest w ogóle przesyłany.
Nie.
Nie.
Rozpoczyna się sesja TLS / SSL , ale najpierw trzeba wykonać więcej kroków.
Udając serwer i działając jako punkt końcowy SSL. Klient musiałby pominąć każdy krok autoryzacji. Niestety jedynym krokiem autoryzacji w większości sesji HTTPS jest sprawdzenie nazwy hosta.
Patrz wyżej. Nie ma klucza sesji do odszyfrowania. Samo połączenie SSL jest bezpieczne, to z kim rozmawiasz może nie być bezpieczne.
Poprawny.
Nie.
Jest tak bezpieczne, jak nazwa użytkownika / hasło, które są o wiele łatwiejsze do wycieku niż klucz prywatny.
źródło
Każdy, kto znajduje się na drodze między klientem a serwerem, może przeprowadzić atak typu man in the middle na https. Jeśli uważasz, że jest to mało prawdopodobne lub rzadkie, weź pod uwagę, że istnieją produkty komercyjne, które systematycznie odszyfrowują, skanują i ponownie szyfrują cały ruch SSL przez bramę internetową. Działają na zasadzie wysyłania klientowi certyfikatu ssl utworzonego w locie ze szczegółami skopiowanymi z „prawdziwego” certyfikatu ssl, ale podpisanego przy użyciu innego łańcucha certyfikatów. Jeśli ten łańcuch zakończy się z którymkolwiek z zaufanych urzędów certyfikacji przeglądarki, ten MITM będzie niewidoczny dla użytkownika. Produkty te są sprzedawane głównie firmom w celu „zabezpieczania” (policyjnych) sieci korporacyjnych i powinny być używane za wiedzą i zgodą użytkowników. Jednak z technicznego punktu widzenia nic nie stoi na przeszkodzie, aby usługodawcy internetowi lub inni operatorzy sieciowi mogli ich używać. (Można bezpiecznie założyć, że NSA ma co najmniej jeden zaufany klucz podpisywania głównego urzędu certyfikacji ).
Jeśli udostępniasz stronę, możesz dołączyć nagłówek HTTP wskazujący, jakim kluczem publicznym ma być podpisana strona. Może to pomóc w ostrzeżeniu użytkowników MITM o ich „bezpiecznym” połączeniu, ale jest to technika polegająca na zaufaniu przy pierwszym użyciu. Jeśli Bob nie ma jeszcze rekordu „prawdziwego” klucza publicznego, Mallory po prostu przepisuje nagłówek pkp w dokumencie. Lista stron internetowych korzystających z tej technologii (HPKP) jest przygnębiająco krótka. Obejmuje Google i Dropbox na swoim koncie. Zazwyczaj brama przechwytująca https będzie przechodzić przez strony z kilku dużych zaufanych witryn, które używają HPKP. Jeśli zobaczysz błąd HPKP, gdy się tego nie spodziewasz, bądź ostrożny.
Jeśli chodzi o hasła, wszystko w połączeniu https jest zabezpieczone przez https, z wyjątkiem nazwy domeny, która musi być wyraźna, aby żądanie mogło zostać skierowane. Ogólnie rzecz biorąc, nie zaleca się umieszczania haseł w ciągu zapytania, gdzie mogą kręcić się w dziennikach, zakładkach itp. Ale ciąg zapytania nie jest widoczny, dopóki https nie zostanie naruszony.
źródło
źródło
Wszystko, co powiedziałeś, jest poprawne, z wyjątkiem części dotyczącej klucza sesji. Celem CA jest pokonanie ataku typu man-in-the-middle - wszystko inne jest wykonywane przez sam SSL. Uwierzytelnianie klienta jest alternatywą dla schematu nazwy użytkownika i hasła.
źródło