阿帕奇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 地址,或者在它们共享域的地方使用通配符证书。