最近将 Apache2 升级到版本 2.2.31 后,我发现 SSL VirtualHost 设置中有一个奇怪的行为。
我托管的一些网站显示了默认主机的证书,即使客户Server Name Identification
知道也是如此,而且这种情况只发生在其中的一些网站上。这显示为常见的 Firefox/Chrome 通行证警告,如果您正在浏览您的家庭银行业务,您可能会被骗,但事实并非如此。
需要明确的是,如果服务器host.hostingdomain.org
有自己的 SSL,则尝试访问https://www.hostedsite.org
报告的证书host.hostingdomain.org
,但少数https://www.hostedsite.me
报告了正确的证书。
所有站点都托管在同一 IP 地址的端口 443 上。事实是 VirtualHosting 在 HTTP 端工作并自动将支持 SNI 的客户端重定向到 SSL,因此它向后兼容不支持 SNI 的客户端。
检查违规 VirtualHosts 的错误日志显示以下文本
[Tue Dec 25 16:02:45 2012] [error] Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile] (/path/to/www.site.org.conf:20)
事实上,虚拟主机已使用 SSLCertificateFile 正确配置。
问题很明显:如何解决?
碰巧它可能是最新版本的 Apache 中的一个错误。
解决方案 1:降级到最新的稳定版
解决方案2:编辑
listen.conf
替换
Listen *:443
(或Listen 443
根据您的设置)为Listen *:443 http
信用
我遇到了同样的问题,对我有用的方法非常简单
编辑 /etc/apache2/ports.conf (对于 ubuntu 或 httpd.conf )
在 ssl_module 下将“Listen 443”更改为“Listen 443 http”
另一个解决方案是确保您的所有 :443 虚拟主机都包含 TLS 配置。
这个问题是最近在 Debian wheezy 中引入的,我从http://blog.noizeramp.com/2010/10/03/apache-2-and-ssl-configuration/得到了解决方案。