最近将 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)
并且实际上 vhost 已使用 SSLCertificateFile 正确配置。
问题很明显:如何解决这个问题?
答案1
碰巧这可能是 Apache 最新版本的一个错误。
解决方案 1:降级到最新稳定版本
解决方案 2:编辑listen.conf
替换Listen *:443
(或Listen 443
根据您的设置)Listen *:443 http
答案2
我也遇到了同样的问题,但对我有用的方法非常简单
编辑 /etc/apache2/ports.conf (对于 ubuntu,或 httpd.conf )
将 ssl_module 下的“Listen 443”更改为“Listen 443 http”
答案3
另一个解决方案是确保所有 :443 vhosts 都包含 TLS 配置。
这个问题最近在 Debian wheezy 中引入我从中得到了解决方案http://blog.noizeramp.com/2010/10/03/apache-2-and-ssl-configuration/。