Apache Name des virtuellen Hosts mit SSL
-
21-08-2019 - |
Frage
Ich bin versucht, die Einrichtung unseres Server-Datenverkehr über SSL zu ermöglichen. Ich bin mir bewusst, dass SSL nicht mit dem Namen Virtual Host funktioniert, aber wir haben alle unseren Apache-Server auf virtuelle Maschinen mit dedizierten privaten IP-Adressen. Wir haben eine primäre virtuelle Maschine, die Mod_proxy Setup zu leiten den Verkehr auf den entsprechenden vms hat.
Um jedoch zu routen https Verkehr brauchen wir das Zertifikat auf dem Proxy sowie die VMs installiert haben. Wir haben ein Wildcard-Zertifikat, das in allen unseren Wirten verwendet werden kann. Alles scheint richtig zu arbeiten, aber ich erhalte die folgende in den Apache-Logs für die Proxy-:
[warnen] Init: SSL-Server-IP / Port-Konflikt: host1.domain.com:443 (/ etc / apache2 / sites-enabled / host1: 1) gegen host2.domain.com:443 (/ etc / apache2 / sites-enabled / host2: 1)
Es gibt eine dieser Fehlermeldung für jeden Host wir Setup auf dem Proxy haben. Unsere Virtual Host Setup für den Proxy veröffentlicht unter:
<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 nicht erhalten arbeiten?
Lösung
Es klingt wie Apache Sie warnt, dass Sie mehrere <VirtualHost>
Abschnitte mit der gleichen IP-Adresse und Port ... so weit wie immer sie haben, ohne Warnungen zu arbeiten, ich denke, Sie so etwas wie Server Name Indication (SNI verwenden, müssten ), ein Weg, um die Hostnamen zu identifizieren angeforderten des SSL-Handshake als Teil. Grundsätzlich können Sie damit tun namensbasierte virtuelle Hosting über SSL, aber ich bin nicht sicher, wie gut es von Browsern unterstützt wird. Anders als so etwas wie SNI, sind Sie grundsätzlich beschränkt auf eine SSL-fähigen Domain-Namen für jede IP-Adresse, die Sie mit dem öffentlichen Internet aus.
Natürlich, wenn Sie die Webseiten richtig zugreifen können, nehmen Sie wahrscheinlich in Ordnung sein, die Warnungen zu ignorieren. Diese besonder diejenigen sind nicht sehr ernst - sie sind in erster Linie ein Hinweis darauf, was zu sehen, wenn Probleme auftreten
Andere Tipps
Soweit ich weiß, unterstützt Apache SNI seit Version 2.2.12 Leider ist die Dokumentation noch nicht, dass die Änderung widerzuspiegeln.
Gehen Sie für http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI bis das ist beendet
Unter Umständen können Sie die ersetzen sind:
VirtualHost ipaddress:443
mit
VirtualHost *:443
Sie müssen wahrscheinlich diese todo auf alle Ihre virt-Hosts.
Es wird wahrscheinlich klar, bis diese Nachricht. Lassen Sie die Direktive Server Sorge über die Nachricht Anfrage-Routing.
Auch hier können Sie nicht in der Lage sein, dies zu tun, wenn Sie mehr IP-Aliase auf die gleiche Maschine.
Die Virtualhost 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 webmaster@domain_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>
Apache unterstützt SSL nicht auf namensbasierten virtuellen Host, nur auf IP-basierte virtuelle Hosts.
Quelle: Apache 2.2 SSL FAQ Frage Warum ist es nicht möglich, verwenden Namensbasierte Virtual Hosting verschiedene SSL virtuelle Hosts zu identifizieren?
Im Gegensatz zu SSL ermöglicht die TLS-Spezifikation für namensbasierte Hosts (SNI, wie jemand anderes erwähnt), aber Apache noch nicht diese Funktion unterstützen. Es wird vermutlich in einer zukünftigen Version beim Kompilieren gegen OpenSSL 0.9.8.
Auch mod_gnutls behauptet SNI zu unterstützen, aber ich habe nie wirklich es versucht.
Zuerst müssen Sie Namevirtualhost ip: 443 in Sie config-Datei! Sie haben wahrscheinlich einen mit 80 am Ende, aber Sie werden auch eine mit 443 benötigen.
Zweitens müssen Sie ein * .domain Zertifikat (Wildcard) (es ist möglich zu machen)
Drittens können Sie in einer ip nur something.domain Bahnen machen (wegen des Zertifikats)
Sie muss unter Teil in der NameVirtualHost
Funktionalität mit bestimmten IP zu ermöglichen.
NameVirtualHost IP_Address:443