2009-02-05 10 views
35

Ich versuche, unsere Server einzurichten, um Datenverkehr über SSL zu ermöglichen. Mir ist bewusst, dass SSL nicht mit dem virtuellen Namen-Host funktioniert, aber wir haben alle unsere Apache-Server auf virtuellen Maschinen mit dedizierten privaten IPs. Wir haben eine primäre virtuelle Maschine, die mod_proxy eingerichtet hat, um den Datenverkehr an die entsprechenden vms zu leiten.Apache Name Virtual Host mit SSL

Um https Verkehr zu routen, müssen wir jedoch das Zertifikat auf dem Proxy sowie dem vms installiert haben. Wir haben ein Wildcard-Zertifikat, das für alle unsere Hosts verwendet werden kann. Alles scheint ordnungsgemäß zu funktionieren, aber ich erhalte Folgendes in den Apache-Protokollen für den Proxy:

[Warnung] Init: SSL-Server IP/Port Konflikt: host1.domain.com:443 (/ etc/apache2/sites- enabled/host1: 1) vs. host2.domain.com:443 (/ etc/apache2/sites-enabled/host2: 1)

Es gibt eine dieser Fehlermeldungen für jeden Host, den wir auf dem Proxy eingerichtet haben. Unser Virtual Host-Setup für den Proxy ist unten aufgeführt:

<VirtualHost ipaddress:443> 
    ServerName host1.domain.com 
    ProxyPreserveHost On 
    ProxyRequests Off 
    ProxyPass/https://privateip:443/ 
    ProxyPassReverse/https://privateip:443/ 

    SSLProxyEngine on 
    SSLEngine on 
    SSLCertificateFile /etc/ssl/certs/server.crt 
    SSLCertificateKeyFile /etc/ssl/private/server.key 
</VirtualHost> 

Gibt es eine Möglichkeit, dass ich dies zum Funktionieren bringen kann?

+0

stellen Sie sicher, dass ein Zertifikat mit dem richtigen 'Gemeinsamen Name' erzeugen oder es wird funktionieren in einige Browser und nicht in IE –

Antwort

21

Es klingt wie Apache warnt Sie, dass Sie mehrere <VirtualHost> Abschnitte mit der gleichen IP-Adresse und Port haben ... soweit es funktioniert ohne Warnungen, ich denke, Sie müssten etwas wie Server Name Indication (SNI), eine Möglichkeit, den Hostnamen anzugeben, der im Rahmen des SSL-Handshakes angefordert wurde. Grundsätzlich können Sie namensbasiertes virtuelles Hosting über SSL durchführen, aber ich bin mir nicht sicher, wie gut es von Browsern unterstützt wird. Anders als bei SNI sind Sie grundsätzlich auf einen SSL-fähigen Domainnamen für jede IP-Adresse beschränkt, die Sie dem öffentlichen Internet zur Verfügung stellen.

Natürlich, wenn Sie in der Lage sind, auf die Websites richtig zuzugreifen, werden Sie wahrscheinlich die Warnungen ignorieren. Diese besonderen diejenigen sind nicht sehr ernst - sie sind in erster Linie ein Hinweis darauf, was zu sehen, wenn Sie Probleme

+0

David, Vielen Dank für Ihre Antwort. Nach einigen Recherchen glaube ich, dass dies der richtige Weg wäre. Die Unterstützung für SNI unter Windows XP ist jedoch begrenzt. Ich denke, ich werde das trotzdem versuchen, da ich ein Wildcard-Zertifikat verwende. Wenn das nicht funktioniert, muss ich die Fehler für jetzt ignorieren. – JamesArmes

+0

PS: Die meisten Websites scheinen dies als Server Name Indication, nicht Identification zu bezeichnen. – JamesArmes

+0

Ah, mein Schlechter ... Ich erinnerte mich wirklich nur an das Akronym, SNI. Ich werde den Beitrag bearbeiten. –

3

Unter Umständen können Sie die ersetzen sind:

VirtualHost ipaddress:443 

mit

VirtualHost *:443 

Sie müssen wahrscheinlich dies auf all Ihren virt-Hosts tun.

Es wird wahrscheinlich diese Nachricht aufräumen. Lassen Sie die Direktive ServerName über das Routing der Nachrichtenanforderung sorgen.

Dies ist möglicherweise nicht möglich, wenn Sie mehrere ip-Aliase auf demselben Computer haben.

+0

Harold, Vielen Dank für Ihre Antwort. Ich habe das früher versucht und es machte keinen Unterschied. – JamesArmes

1

Apache unterstützt SSL nicht auf namensbasierten virtuellen Hosts, nur auf IP-basierten virtuellen Hosts.

Quelle: Apache 2.2 SSL FAQ Frage Why is it not possible to use Name-Based Virtual Hosting to identify different SSL virtual hosts?

Im Gegensatz zu SSL ermöglicht die TLS-Spezifikation für namensbasierte Hosts (SNI, wie jemand anderes erwähnt), aber Apache noch nicht über diese Funktion unterstützen. Es wird angeblich in einer zukünftigen Version, wenn gegen openssl 0.9.8 kompiliert werden.

Auch behauptet mod_gnutls SNI zu unterstützen, aber ich habe es nie wirklich versucht.

+2

Sieht aus wie diese Antwort ist ein bisschen veraltet –

+0

Sie sind absolut richtig Name basiert SSL funktioniert nicht. Guter Link. –

1

Erster fertig ist müssen Sie Namevirtualhost ip: 443 in Sie config-Datei! Sie haben wahrscheinlich eine mit 80 am Ende, aber Sie müssen auch eine mit 443.

Zweitens benötigen Sie ein * .domain Zertifikat (Wildcard) (es ist möglich zu machen)

Dritte möglich macht nur something.domain Bahnen in einem IP (wegen des Zertifikats)

+0

einer Ihrer Portnummern sind falsch, und ich kann es nicht beheben 6 Char min bearbeiten. –

0

die Virtual würde wie folgt aussehen:

NameVirtualHost IP_Address:443 

<VirtualHost IP_Address:443> 
    SSLEngine on 
    SSLCertificateFile /etc/pki/tls/certs/ca.crt # Where "ca" is the name of the Certificate 
    SSLCertificateKeyFile /etc/pki/tls/private/ca.key 
    ServerAdmin [email protected]_name.com 
    DocumentRoot /var/www/html 
    ServerName www.domain_name.com 
    ErrorLog logs/www.domain_name.com-error_log 
    CustomLog logs/www.domain_name.com-access_log common 
</VirtualHost>