_default_ VirtualHost nakłada się na port 443, pierwszy ma pierwszeństwo

64

Mam dwie aplikacje Ruby on Rails 3 działające na tym samym serwerze (ubuntu 10.04), obie z SSL.

Oto mój plik konfiguracyjny Apache:

<VirtualHost *:80>
ServerName example1.com
DocumentRoot /home/me/example1/production/current/public
</VirtualHost>
<VirtualHost *:443>
ServerName example1.com
DocumentRoot /home/me/example1/production/current/public
SSLEngine on
SSLCertificateFile /home/me/example1/production/shared/example1.crt
SSLCertificateKeyFile /home/me/example1/production/shared/example1.key
SSLCertificateChainFile /home/me/example1/production/shared/gd_bundle.crt
SSLProtocol -all +TLSv1 +SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM
</VirtualHost>


<VirtualHost *:80>
ServerName example2.com
DocumentRoot /home/me/example2/production/current/public
</VirtualHost>
<VirtualHost *:443>
ServerName example2.com
DocumentRoot /home/me/example2/production/current/public
SSLEngine on
SSLCertificateFile /home/me/example2/production/shared/iwanto.crt
SSLCertificateKeyFile /home/me/example2/production/shared/iwanto.key
SSLCertificateChainFile /home/me/example2/production/shared/gd_bundle.crt
SSLProtocol -all +TLSv1 +SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM
</VirtualHost>

W czym problem:

Po zrestartowaniu mojego serwera daje mi to takie dane wyjściowe:

 * Restarting web server apache2                                   
 [Sun Jun 17 17:57:49 2012] [warn] _default_ VirtualHost overlap on port 443, the first has precedence
 ... waiting [Sun Jun 17 17:57:50 2012] [warn] _default_ VirtualHost overlap on port 443, the first has precedence

W Google, dlaczego ten problem nadchodzi, dostałem coś takiego:

Nie można używać wirtualnych hostów opartych na nazwie z SSL, ponieważ uzgadnianie SSL (gdy przeglądarka akceptuje certyfikat bezpiecznego serwera WWW) następuje przed żądaniem HTTP, które identyfikuje odpowiedni wirtualny host oparty na nazwie. Jeśli planujesz używać wirtualnych hostów opartych na nazwach, pamiętaj, że działają one tylko z niezabezpieczonym serwerem sieci Web.

Ale nie jestem w stanie dowiedzieć się, jak uruchomić dwie aplikacje ssl na tym samym serwerze.

Czy ktoś może mi pomóc?

Mohit Jain
źródło
5
Nie masz żadnych _default_vhostów w podanej konfiguracji, więc są one gdzie indziej. Jaka jest wydajność apache2ctl -S? (Tak, możliwe jest uruchamianie wielu vhostów opartych na nazwie SSL na różnych certyfikatach, pod warunkiem, że nie potrzebujesz obsługi przeglądarek klienckich z systemem Windows XP ani żadnych innych, które nie obsługują TLS SNI. Czy potrzebujesz obsługi systemu Windows XP?)
Shane Madden

Odpowiedzi:

87

Prawie na miejscu!

Dodaj to do ports.conf lub http.conf i zachowaj powyższą konfigurację.

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.

    # !important below!
    NameVirtualHost *:443 
    Listen 443
</IfModule>
Daniel T. Magnusson
źródło
Komentarz „#! Ważne!” Musi zostać usunięty lub przeniesiony do innej linii. W przeciwnym razie bardzo dziękuję za zinterpretowanie tego niedokładnego komunikatu o błędzie dla mnie.
flickerfly
3
To już nie działa w Apache 2.4.7
malhal
Dziękuję Ci. Odkryłem, że muszę skomentować Listen 443, ponieważ jest to również używane w moich indywidualnych konfiguracjach conf.d / website.conf
dlink
3

Pomogło mi to również wykonać polecenie „/ usr / sbin / apachectl -S”. To polecenie exit pokazuje DWIE pliki „ssl.conf” w tej samej ścieżce. Przenieś lub usuń plik przestępcy, po czym wszystko powinno działać.

Robert
źródło
1

Możesz dodać to do konfiguracji apache na /etc/apache2/ports.conf:

<IfModule mod_ssl.c>                
    Listen 443                      
    <IfModule !mod_authz_core.c>    
        # Apache 2.2                
        NameVirtualHost *:443       
    </IfModule>                     
</IfModule>                         

(Działa to zarówno w Apache 2.2, jak i 2.4)

rubo77
źródło