So stellen Sie Apache so ein, dass im HTTPS-Protokoll nur ein Host angezeigt wird

So stellen Sie Apache so ein, dass im HTTPS-Protokoll nur ein Host angezeigt wird

Ich habe einen Webserver Apache auf FreeBSD und möchte SSL nur an eine von vielen Domänen binden. Jetzt ist meine Konfiguration

NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /home/web/web/ssldomain.com
ServerName ssldomain.com
ServerAlias www.ssldomain.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/home/web/web/ssldomain.com"
ServerName www.ssldomain.com 
ServerAlias ssldomain.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"
</VirtualHost>

Alles ok, aber im Browser aufhttps://www.domain01.com/zeigt Seiten der Site ssldomain.com an. Das ist schlecht.

Wie kann ich Apache so einstellen, dass keine Seiten von ssldomain.com angezeigt werden aufhttps://www.domain01.comim Browser.

UPD: Ich habe versucht, VirtualHosts :80 und :443 für beide Domänen zu definieren. 1) Verwendung des ursprünglichen SSL von ssldomain.com für beide Domänen; 2) Verwendung des ursprünglichen SSL für ssldomain.com und des selbstsignierten SSL für domain01.com. In beiden Fällen zeigt der Browser einen Zertifikatsfehler bei HTTPS an, aber die Seiten sind korrekt.

Konfiguration für diese beiden Fälle

Include etc/apache22/extra/httpd-ssl.conf

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
SSLEngine on
SSLCertificateFile "/usr/local/etc/apache22/ssl/domain01.com/server.cert"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/domain01.com/server.key"
# This is for second case (of course 2 lines above are comments)
# SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
# SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
# SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
# SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"

#Redirect permanent / http://www.domain01.com/
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /home/web/web/ssldomain.com
ServerName ssldomain.com
ServerAlias www.ssldomain.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/home/web/web/ssldomain.com"
ServerName www.ssldomain.com 
ServerAlias ssldomain.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"
</VirtualHost>

Mit freundlichen Grüßen!

Antwort1

Apache verwendet standardmäßig den ersten virtuellen Host für diese IP (oder passende Platzhalter wie in diesem Fall *) und Port (443), wenn es keinen virtuellen Host mit einem passenden Servernamen oder Serveralias finden kann. Sie müssen also eine separate Site für www.domain01.com auf Port 443 einrichten, so wie Sie es für www.ssldomain.com:443 getan haben, damit nicht auf die einzige Site zurückgegriffen wird, die Sie als Standard haben.

Dieser virtuelle Host kann so eingerichtet werden, dass er auf HTTP zurückgeleitet wird, wenn Sie möchten (beachten Sie, dass diese Umleitung erfolgtnachdie SSL-Aushandlung erfordert also weiterhin ein gültiges Zertifikat – für jeden SSL-Vhost muss ein Zertifikat eingerichtet werden, Sie können jedoch dasselbe Zertifikat verwenden, wenn es auch für diesen Vhost gültig ist).

Wie kommt es, dass Sie keinen Zertifikatsfehler erhalten?https://www.domain01.com? Ich würde vermuten, dass dies entweder der Fall ist (und nur wenn Sie es ignorieren, sehen Sie den Inhalt von www.ssldomain.com) oder dass Ihr Zertifikat beide Domänen abdeckt (in diesem Fall sollten Sie dies auf jeden Fall als separaten virtuellen Host einrichten und auf http zurückleiten).

Übrigens, entgegen der landläufigen Meinung tun Sie dasnichtSie benötigen eine separate IP-Adresse, um mehrere SSL-Hosts auf der Apache-Instanz einzurichten – selbst für alte Browser, die SNI nicht unterstützen. Es gibt einen anderen Workaround. Weitere Einzelheiten finden Sie hier:Deaktivieren von SNI für bestimmte virtuelle Hosts auf Apache

Antwort2

Das funktioniert bei mir, ich ändere nur die Reihenfolge der Domänen – die erste ist ssldomain.com mit dem ursprünglichen SSL-Zertifikat und die zweite ist domain01.com mit demselben SSL-Zertifikat und der gleichen Weiterleitung.

Include etc/apache22/extra/httpd-ssl.conf

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
DocumentRoot /home/web/web/ssldomain.com
ServerName ssldomain.com
ServerAlias www.ssldomain.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/home/web/web/ssldomain.com"
ServerName www.ssldomain.com 
ServerAlias ssldomain.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"

Redirect permanent / http://www.domain01.com/
</VirtualHost>

Besonderer Dank geht an @BazzaDP.

verwandte Informationen