命名虚拟主机 + HTTPS 不起作用吗?

命名虚拟主机 + HTTPS 不起作用吗?

阿帕奇httpd 文档表示基于名称的虚拟主机不支持 SSL。但我们的网站就是在这样的配置下运行的!

在 site1.conf 中,我们有

<VirtualHost *:443>
    ServerName                  site1:443
    DocumentRoot                /var/www/site1
    ErrorLog                    /var/log/apache2/site1.error.log
    TransferLog                 /var/log/apache2/site1.access.log

    SSLEngine                   on
    SSLCipherSuite              ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
    SSLCertificateFile          /etc/apache2/keys/trac.crt
    SSLCertificateKeyFile       /etc/apache2/keys/trac.key
    SetEnvIf                    User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
...
</VirtualHost>

另一个网站几乎完全相同,但网站 2 而不是网站 1。据我所知,我们要么非常幸运,要么我看不懂文档。这两个 URL 都有效,并且它们通过 HTTPS 提供不同的内容。

有人可以解释一下吗?

答案1

较新版本的 Apache 支持服务器名称指示 (SNI),它允许基于名称的 HTTPS 虚拟托管。要使 SNI 正常工作,客户端浏览器软件需要具备 SNI 功能,但不幸的是,并非所有浏览器都具备该功能(最明显的是 WinXP 上的 Internet Explorer)。

答案2

SSL 可以工作,但是除非您有通配符证书并且两个站点都受该证书覆盖,否则客户端将被提示证书名称与一个或两个站点不匹配。

如果您使用自签名证书,那么这通常是一个没有实际意义的问题,因为无论如何客户端都会被提示这一点。

可以从同一个 Apache 服务器为多个安全的 NameVirtualHosts 提供服务,方法是为它们提供单独的 IP 地址,或者在它们共享域的地方使用通配符证书。

相关内容