Apache SSL VirtualHosts na jednym adresie IP przy użyciu certyfikatu UCC / SAN

11

Muszę hostować kilka wirtualnych hostów Apache za pomocą protokołu SSL z jednego adresu IP.

Teraz rozumiem, że ponieważ SSL otacza żądanie HTTP, nie ma sposobu, aby dowiedzieć się, który host jest żądany, dopóki klucz publiczny nie zostanie wysłany do klienta w pierwszej kolejności. To zasadniczo ogranicza możliwość korzystania z wirtualnych hostów SSL przy użyciu standardowego certyfikatu SSL.

Uzyskałem certyfikat Unified Communications Certificate (UCC), znany również jako certyfikat alternatywnej nazwy podmiotu (SAN). To pozwala mi obsługiwać ten sam certyfikat dla wielu domen.

Chciałbym, aby był to certyfikat obsługiwany przez Apache dla każdego żądania SSL - a następnie niech Apache rozwiąże wirtualny host jak zwykle po ustanowieniu szyfrowania.

Jak mam w tym celu skonfigurować Apache? Próbowałem zbadać, jak to zrobić, ale wszystko, co mogę znaleźć, to cytaty, które mówią, że jest to możliwe, ale nie ma szczegółów:


wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI

Chociaż Apache może renegocjować połączenie SSL później po zobaczeniu nazwy hosta w żądaniu (i robi to), jest za późno, aby wybrać odpowiedni certyfikat serwera do użycia z nazwą hosta żądania podczas wstępnego uzgadniania, co powoduje ostrzeżenia / błędy przeglądarki o posiadaniu certyfikatów zła nazwa hosta w nich.

serverfault.com/questions/48334/apache-virtual-hosts-with-ssl

Nawiasem mówiąc, możliwe jest posiadanie wielu nazwanych wirtualnych hostów zabezpieczonych przez SSL na jednym adresie IP - robię to na mojej stronie internetowej - ale generuje różnego rodzaju ostrzeżenia w dziennikach Apache i ostrzeżenia certyfikatów w przeglądarce. Z pewnością nie poleciłbym go na stronę produkcyjną, która musi wyglądać czysto. -David 31 lipca o 4:58

www.digicert.com/subject-alternative-name.htm

Wirtualny host Wiele witryn SSL na jednym adresie IP. Hostowanie wielu witryn z obsługą SSL na jednym serwerze zazwyczaj wymaga unikalnego adresu IP dla każdej witryny, ale certyfikat z alternatywnymi nazwami podmiotów może rozwiązać ten problem. Zarówno Microsoft IIS 6, jak i Apache mogą hostować witryny HTTPS wirtualnego hosta przy użyciu protokołu Unified Communications SSL, znanego również jako certyfikaty SAN.


Proszę pomóż.

Mikuso
źródło

Odpowiedzi:

13

Przetestowałem to na mojej instancji Apache 2.2.14 i działało dobrze:

Użyj dyrektywy NameVirtualHost (do ports.conf):

NameVirtualHost *:443

zdefiniuj swoje vhosty:

<VirtualHost *:443>
  ServerName www.siteA.com
  DocumentRoot "/opt/apache22/htdocs/siteA"
  SSLCertificateFile "/path/to/my/cert"
  SSLCertificateKeyFile "/path/to/my/key"
</VirtualHost>
<VirtualHost *:443>
  ServerName www.siteB.com
  DocumentRoot "/opt/apache22/htdocs/siteB"
  SSLCertificateFile "/path/to/my/cert"
  SSLCertificateKeyFile "/path/to/my/key"
</VirtualHost>

Użyłem tego linku jako zasobu.

Micheasz
źródło
1
odpowiedź jest poprawna. Jedną rzeczą, która mnie potknęła na LOOOONNNNNNGGGGG było to, że miałem literówkę, w której miałem <Virtual *:433>... prawidłowy port to 443! Ugh, godziny mojego życia straciły na tym ... Mam nadzieję, że mój ból nie poszedł na marne, a to pomaga komuś ...
Nick P.