我在FreeBSD上有一个Web服务器Apache,并且希望将SSL绑定到许多域中的一个。 现在我的configuration是
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>
一切正常,但在浏览器上https://www.domain01.com/显示ssldomain.com网站的页面。 这是坏的。
如何调整Apache以防止在浏览器中显示https://www.domain01.com上的ssldomain.com页面。
UPD:我试图为这两个域定义VirtualHosts:80和:443。 1)将ssldomain.com的原始SSL用于两个域; 2)使用ssldomain.com的原始SSL和domain01.com的自签名SSL。 在这两种情况下,浏览器显示HTTPS上的证书错误,但页面是正确的。
configuration这两个案例
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>
最好的祝福!
如果Apache无法find具有匹配的ServerName或ServerAlias的虚拟主机,则默认为该IP的第一个虚拟主机(或在本例中匹配*的通配符)和端口(443)。 所以你需要在443端口为www.domain01.com设置一个单独的站点,就像你已经完成了www.ssldomain.com:443一样,所以它不会回落到默认的唯一一个站点。
这个虚拟主机可以设置为redirect到HTTP(如果你想要的话)(注意,这个redirect是在 SSL协商之后完成的,所以仍然需要一个有效的证书 – 每个SSL虚拟主机都需要为它设置一个证书,尽pipe你可以使用相同的certificate它是否对该虚拟主机有效)。
在这一点上,你是如何在https://www.domain01.com上得到证书错误? 我猜想,无论你是(只有当你忽略它,你看到www.ssldomain.com内容),或者你的证书涵盖了这两个域(在这种情况下设置为一个单独的虚拟主机,并redirect回http是肯定的要走的路)。
顺便说一句,与stream行的看法相反,您不需要单独的IP地址就可以在Apache实例上设置多个SSL主机 – 即使是不支持SNI的旧浏览器也是如此。 还有另一个工作。 有关更多详细信息,请参阅此处: 为Apache上的特定虚拟主机禁用SNI
这适用于我,我只更改域的顺序 – 第一个是具有原始SSL证书的ssldomain.com,第二个是具有相同SSL证书和redirect的domain01.com。
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>
特别感谢@BazzaDP。