Wiele domen z SSL na tym samym adresie IP

Odpowiedzi:

28

Myślę, że dobrym pomysłem jest wyjaśnienie, na czym tak naprawdę polega problem z wirtualnymi hostami i SSL / TLS.

Kiedy łączysz się z serwerem Apache przez HTTP, wysyłasz zestaw nagłówków HTTP. Wyglądają tak:

GET /index.html HTTP/1.1
 Host: www.nice-puppies.com

Jeśli masz wirtualny hosting apache, zajrzy do pola hostów, a następnie pobierz odpowiedni index.html dla siebie. Problem polega na dodaniu SSL / TLS. Serwer konfiguruje szyfrowanie przed wysłaniem żądania HTTP. Dlatego serwer nie wie, czy przejdziesz na stronę www.nice-puppies.com lub www.evil-haxxor.com, dopóki nie zostanie zakończone uwierzytelnianie / szyfrowanie. Serwer nie może zgadnąć (ponieważ wysłanie niewłaściwego certyfikatu powoduje nieprzyjemny komunikat błędu).

Jednym z rozwiązań jest certyfikat wieloznaczny (jak wspomniano powyżej), który jest ważny dla * .nice-puppies.com. W ten sposób możesz użyć tego samego certyfikatu dla wielu domen, ale nie możesz mieć certyfikatu * .com (dobrze, możesz, ale byłoby to bardzo złe dla wszystkich innych), więc ogólnie będziesz potrzebował osobnego adresu IP dla każdego Domena HTTPS.

pehrs
źródło
4
Dobre wyjaśnienie, ale możesz mieć certyfikat UC, który pozwoli na wiele domen w jednym certyfikacie
Sam Cogan
1
Tak, możesz mieć ujednolicone certyfikaty komunikacyjne (certyfikaty UCC / UC). Powinienem chyba o nich wspomnieć. Są one, o ile widziałem, najczęściej używane z serwerem Exchange / Office Communication Server. A jeśli używasz tego samego certyfikatu do różnych witryn, nadużywasz semantyki x509. Ale działają na większości stosów TLS.
pehrs
6
Również SNI. Twoje oświadczenie nie jest już ostateczne, ludzie. Twoje wyjaśnienie jest historycznie dokładne, ale nie odzwierciedla już obecnych technologii.
Warner
4
SNI nie działa (jeszcze?) Z IE6 w systemie Windows XP. Który rodzaj ogranicza wartość, biorąc pod uwagę udział w rynku. Wierzę, że pierwotny użytkownik był bardziej zainteresowany tym, co się stanie, niż zestawem hacków, które można obejść.
pehrs
Próbowałem poprawić błąd pisowni na końcu SHTTP do HTTPS, ale zostało to odrzucone jako zbyt mała zmiana.
Stuart
8

Prawdziwym rozwiązaniem tego problemu jest „Wskazanie nazwy serwera”:

http://en.wikipedia.org/wiki/Server_Name_Indication

Zaczyna się dopiero pojawiać na serwerach i klientach internetowych, więc nie jest to tak naprawdę coś, z czego można teraz korzystać, ale mam nadzieję, że za kilka lat nie będzie to tak dużym problemem.


źródło
2

Problem polega na tym, że certyfikat SSL jest powiązany z adresem IP, a nie nazwą hosta. Gdy połączenie przychodzi na adres IP dla żądania HTTPS, pierwszą czynnością jest nawiązanie komunikacji SSL poprzez przekazanie certyfikatu serwera i / lub certyfikatu klienta. Na tym etapie uzgadniania połączenia serwer Apache nie ma możliwości dowiedzenia się, do czego służy zapytanie. Inaczej jest w przypadku ruchu HTTP (non-SSL), ponieważ po ustanowieniu połączenia serwer Apache może określić konfigurację hosta wirtualnego, która będzie używana, jeśli klient wyśle Hostnagłówek lub przekaże go do pierwszego skonfigurowanego hosta wirtualnego.

Jeśli miałeś wiele wirtualnych hostów w tej samej domenie, możesz skonfigurować pojedynczy certyfikat wieloznaczny na adres IP i zdefiniować wiele wirtualnych hostów z różnymi nazwami serwerów; Jeśli jednak te nazwy serwerów nie będą miały tej samej nazwy domeny, wygenerują błędy serwera klienta. Działałoby to, ponieważ certyfikat wieloznaczny byłby ważny dla wszystkich nazw hostów pod tą nazwą domeny. Potrzebny byłby inny adres IP, gdyby nazwy domen były różne, ponieważ pierwszym certyfikatem zdefiniowanym dla tego adresu IP byłby ten prezentowany do łączenia klientów.

Jeremy Bouse
źródło
1

Można go dodać do jednego certyfikatu ssl jako SAN (alternatywna nazwa podmiotu). Podczas mojej działalności musiałem poprosić o certyfikat organizacji sll. użyłem globalsign.


źródło
1

Właściwie dzięki nowoczesnemu oprogramowaniu MOŻESZ obsługiwać wiele witryn HTTPS za pośrednictwem jednego adresu IP, korzystając z nowej funkcji o nazwie „SNI - Server Name Indication”.

http://en.wikipedia.org/wiki/Server_Name_Indication

http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI

Sam jeszcze tego nie użyłem, ale to dobrze brzmi dla witryn wewnętrznych i intranetowych. Większość nowoczesnych przeglądarek obsługuje SNI. IE6 nie obsługuje SNI, ale IE7 tak.

(Poprawka: 20100426 - SNI nie jest w ogóle obsługiwany w systemie Windows XP. Windows Vista i nowsze obsługują SNI. Patrz „Sekcja 2.2.3” na stronie http://msdn.microsoft.com/en-us/library/dd208005% 28v = PROT.13% 29.aspx # id8 ).

Stefan Lasiewski
źródło
2
W IE obsługa nie pochodzi z wersji IE, a raczej z podstawowej wersji systemu operacyjnego. Vista i nowsze obsługują SNI. XP nie, więc nawet w IE8 na XP nie dostaniesz SNI.
Nasko
1

Pracuję nad tym samym zagadnieniem. Jako mój test, IE7 i nowsze wersje (tylko w Win7 i Vista) / Chrome / Firefox / Safari / Opera obsługują „Server Name Indication”. W rzeczywistości, jeśli przeglądarka używa Tsl 1.0, obsługuje „Wskazanie nazwy serwera”.

Sean
źródło
0

Myślę, że OP pyta, co się stanie, jeśli doda certyfikat SSL do adresu IP, który ma wiele wirtualnych hostów. Jeśli żaden z pozostałych wirtualnych hostów nie używa certyfikatu SSL, powinien być w porządku.

Iraklis
źródło
cóż, zastanawia mnie pytanie. Tytuł Q mówi czarny, treść mówi biały.
Iraklis
to jest biały
Iraklis
0

Jeśli spróbujesz dodać dwa certyfikaty w tym samym adresie IP, wszędzie pierwszy certyfikat zostanie użyty. Jeden adres IP - jeden certyfikat SSL.

Jeśli chcesz uzyskać więcej certyfikatów SSL w tym samym adresie IP, rozważ uzyskanie certyfikatu z wieloma domenami (tzw. UCC - sprawdź @ godaddy ) lub certyfikatu wieloznacznego (droższego).

Andrejs Cainikovs
źródło
Masz na myśli, że certyfikat dodany po raz pierwszy w Apache conf będzie używany w obu przypadkach?
nitiny
1
Jeśli masz dwa certyfikaty - dla strony A i B, a apache ładuje konfigurację dla hostów w sekwencji A.conf, następnie B.conf, wówczas użyje certyfikatu z A.conf. Lub odwrotnie.
Andrejs Cainikovs