Skąd serwer WWW wie, której pary kluczy użyć do odszyfrowania SSL?

18

Rozumiem, że kiedy Apache otrzyma żądanie do jednego z portów TCP, na których nasłuchuje (np. 80, 443), zadecyduje o tym, którego hosta żąda, patrząc na nagłówek HTTP Host. Serwer będzie wtedy wiedział, do którego wirtualnego hosta powinien przekierować żądanie.

Ale jak to działa dla HTTP przez SSL / TLS? Ponieważ całe żądanie HTTP jest szyfrowane (przynajmniej tak myślę, że gdzieś przeczytałem), informacje w nagłówku można odczytać dopiero po odszyfrowaniu danych przez serwer. Ale w celu odszyfrowania musi wiedzieć, której pary kluczy użyć, ponieważ na serwerze sieciowym może być zainstalowanych wiele certyfikatów SSL.

Skąd więc serwer wie, jakiego klucza potrzebuje do odszyfrowania?


Zgaduję :

Mogę sobie wyobrazić, że uścisk dłoni TLS zapewnia niezbędne informacje.


Odnośnie flagi „możliwego duplikatu” :

Chociaż zgadzam się, że odpowiedzi zarówno na pytanie powiązane, jak i moje są podobne, muszę powiedzieć, że pytanie jest inne. Nie ma wątpliwości, czy i jak możliwe jest hostowanie wielu witryn z niezależnymi certyfikatami SSL. Zamiast tego moje pytanie dotyczy podstawowego aspektu technicznego.

paolo
źródło
Powiązane: serverfault.com/questions/126072/…
Ilmari Karonen
Zgadzam się, że odpowiedzi są dość podobne, jednak uważam, że pytania są zupełnie inne.
paolo

Odpowiedzi:

29

Pierwotnie serwer WWW nie wiedział. To był powód, dla którego potrzebujesz osobnego adresu IP dla każdego vhosta SSL, który chcesz hostować na serwerze. W ten sposób serwer wiedział, że kiedy pojawiło się połączenie na IP X, musiał użyć konfiguracji (w tym certyfikatów) dla powiązanego vhosta.

Zmieniło się to wraz ze wskazaniem nazwy serwera , rozszerzeniem TLS, które rzeczywiście pozwala klientowi wskazać wymaganą nazwę hosta w procesie uzgadniania. To rozszerzenie jest używane we wszystkich nowoczesnych systemach operacyjnych, ale stare przeglądarki lub serwery go nie obsługują, więc jeśli oczekujesz, że klienci będą nadal korzystać z IE 6 na WinXP, nie będziesz miał szczęścia.

Sven
źródło
2
Jeśli ktoś nadal używa XP, to i tak nie zasługuje na odwiedzenie mojej strony;)
paolo,
2
należy bardzo ostrożnie ograniczać klientów w ten sposób (przeglądarki, a nie ludzie). Wiele firm nie aktualizuje systemu Windows zbyt dobrze, podobnie jest z niektórymi dostawcami telefonów z Androidem, zwykle nie aktualizują systemu operacyjnego w ogóle (a przynajmniej niewiele). Windows XP ma 8%, a udział w rynku Androida w wersji wcześniejszej niż 4.4 wydaje się ogromny.
coteyr
W przypadku, gdy serwer nie obsługuje SNI, można użyć serwera proxy z obsługą SNI przed serwerem bez obsługi SNI.
kasperd
1
@coteyr Zdecydowana większość pozostałych użytkowników XP jest w Chinach. Na szczęście wykorzystanie w innych miejscach jest bardzo małe, na szczęście przynajmniej w Internecie.
Michael Hampton
7

Wygląda na to, że masz jakieś nieporozumienia na temat TLS / SSL. Żądanie HTTP nie jest szyfrowane kluczem publicznym serwera. Jest szyfrowany za pomocą symetrycznego szyfru przy użyciu klucza wynegocjowanego w poprzednim uzgadnianiu.

Krótki opis uzgadniania TLS: Serwer i klient negocjują pewne oprogramowanie szyfrujące, klucze symetryczne i inne szczegóły. Aby zapobiec MITM, serwer zwykle wysyła swój certyfikat (łańcuch) do klienta i uwierzytelnia uzgadnianie za pomocą klucza w certyfikacie. (Istnieją również inne warianty, np. Uwierzytelnianie klienta lub TLS-PSK, ale nie są one zbyt często używane z HTTP). Klient może albo zweryfikować certyfikat (w zwykły sposób), albo go zignorować.

Chociaż SNI jest ważne, gdy używa się wielu certyfikatów TLS w jednym adresie IP, nie jest konieczne, aby serwer mógł odszyfrować żądanie. Bez SNI serwer nie wie, który łańcuch certyfikatów powinien zostać wysłany, dlatego serwer zwykle wybiera jeden (np. Pierwszy vhost), co oczywiście może być niewłaściwe. Jeśli serwer wybierze niewłaściwy łańcuch certyfikatów, klient powinien go odrzucić (aby nie kontynuować wysyłania żądania HTTP). Jeśli jednak klient zignoruje certyfikat (lub jeśli niepoprawny certyfikat zostanie oznaczony jako zaufany dla tej witryny), może z powodzeniem kontynuować. Ponieważ klucz symetryczny używany do szyfrowania nie zależy od certyfikatu (TLS jest zaprojektowany do pracy również bez certyfikatów), serwer może go odszyfrować.

Tylko drobna uwaga, dlaczego piszę o TLS, podczas gdy pytasz o SSL: TLS jest nową wersją SSL. Wszystkie wersje protokołu SSL są uważane za niebezpieczne dla ogólnego użytku, dlatego obecnie używamy głównie TLS (1.0, 1.1, 1.2).

v6ak
źródło
„Żądanie HTTP nie jest szyfrowane za pomocą klucza publicznego serwera. Jest szyfrowane za pomocą symetrycznego szyfru przy użyciu klucza wynegocjowanego w poprzednim uzgadnianiu”. Nie wiedziałem o tym, dzięki za heads-up! Wiem jednak, że protokół TLS zastąpił protokół SSL, ale utknęliśmy w tradycyjnym określeniu „certyfikat SSL”, stąd moje wspomnienie.
paolo
Wiem, że terminy takie jak „certyfikat SSL” dość często dotyczą TLS. Staram się ich unikać, ale nie byłem pewien, czy ty (lub inni) znasz termin TLS.
v6ak