Myślę, że możesz to zrobić, ale nie w taki sposób, w jaki próbujesz to zrobić.
Certyfikat SSL to instrukcja wiążąca publiczny klucz szyfrowania ze strukturą X.500, która zawiera element CN lub Common Name; podpisany certyfikat to taki, w którym powiązanie jest weryfikowane w sposób wiarygodny przez zewnętrzny urząd certyfikacji, przy użyciu klucza publicznego znanego już użytkownikom końcowym (stos certyfikatów urzędu certyfikacji (CA) znajdujących się w przeglądarce).
Gdy odwiedzasz witrynę internetową zabezpieczoną protokołem SSL za pomocą przeglądarki, podpisany kod CN jest przekazywany do przeglądarki. To, co wybierze przeglądarka, zależy od przeglądarki. Przeglądarki, które znam, porównują je z żądaną nazwą hosta i popełniają błąd, jeśli jest inny (lub jeśli to uwierzytelnione powiązanie nie wytrzymuje analizy, np. Certyfikat podpisywania nie jest znany przeglądarce lub powiązanie jest poza daty, ale to inny problem). Nic nie stoi na przeszkodzie, aby uzyskać publicznie podpisany certyfikat, w którym CN to adres IP, a nie FQDN (w pełni kwalifikowana nazwa domeny) [1], ale to nie magicznie zmusi przeglądarki do porównania CN z IP adres zamiast żądanej nazwy hosta .
Podejrzewam, że najprostszym sposobem rozwiązania problemu jest założenie własnego urzędu certyfikacji, co jest łatwe do zrobienia i istnieje wiele publicznych samouczków na temat; jeden jest tutaj . Gdy użytkownicy końcowi zaimportują urząd certyfikacji do swoich przeglądarek, wszystkie wybrane przez Ciebie certyfikaty zostaną zaakceptowane jako wiarygodne.
Możesz wtedy mieć drugi problem polegający na tym, że chcesz uruchomić wiele witryn NameVirtualHost na jednym adresie IP. Historycznie było to nie do pokonania, ponieważ (w przeciwieństwie do TLS) negocjacje SSL odbywają się zanim cokolwiek innego na połączeniu; oznacza to, że CN osadzony w certyfikacie jest znany klientowi i używany przez niego, zanim klient będzie w stanie powiedzieć z jakim hostem próbuje się połączyć.
Ostatnio wydaje się, że wprowadzono rozszerzenie protokołu o nazwie SNI (Server Name Indication), które pozwala klientowi i serwerowi wskazać, że chcieliby zrobić pewne nazwy hosta przed przedstawieniem certyfikatu SSL, pozwalając na właściwy zestaw certyfikatów wydawanych przez serwer. Najwyraźniej wymaga to Apache 2.2.10, wystarczająco nowej wersji OpenSSL i (co ważne ) wsparcia po stronie klienta.
Więc gdybym musiał zrobić to, co próbujesz zrobić, zastanowiłbym się nad wybiciem własnego certyfikatu urzędu certyfikacji, mówiącym użytkownikom końcowym, że muszą korzystać z przeglądarek obsługujących SNI i importować mój certyfikat główny urzędu certyfikacji, a także wycinanie i podpisywanie własnych certyfikatów SSL dla każdej strony z błędami.
[1] OK, być może nie znalazłeś nikogo, kto by to zrobił, ale to szczegół implementacji. Próbuję tu pokazać, że nawet gdybyś to zrobił, nie rozwiązałoby to twojego problemu.