Apache SNI 的 SSL 证书问题

Apache SNI 的 SSL 证书问题

我的服务器上的 VirtualHost 配置有问题。我的服务器运行的是 Ubuntu 14.04.5 LTS (GNU/Linux 4.4.0-31-generic x86_64),带有 Apache/2.4.7 (Ubuntu)。

我已经从这里的其他帖子中阅读了大量有关 Apache 和 SNI 的文章,但我无法解决我的具体问题。

我从不同的域配置了几个 VirtualHosts,每个都有自己的 SSL 证书,如下所示:

<VirtualHost *:80>
  ServerAdmin [email protected]
  ServerName mydomain.com
  ServerAlias www.mydomain.com
  DocumentRoot /home/user/mydomain.com/public_html
  ErrorLog /home/user/mydomain.com/logs/error.log
  CustomLog /home/user/mydomain.com/logs/access.log combined
</VirtualHost>

<VirtualHost *:443>
  ServerAdmin [email protected]
  ServerName mydomain.com
  ServerAlias www.mydomain.com
  DocumentRoot /home/user/mydomain.com/public_html
  ErrorLog /home/user/mydomain.com/logs/error.log
  CustomLog /home/user/mydomain.com/logs/access.log combined
  SSLEngine on
  SSLCertificateFile /etc/apache2/ssl/mydomain.com.crt
  SSLCertificateKeyFile /etc/apache2/ssl/mydomain.com.key
  SSLCACertificateFile /etc/apache2/ssl/mydomain.com.root.crt
  SSLCertificateChainFile /etc/apache2/ssl/mydomain.com.chain.crt
</VirtualHost>

<VirtualHost *:80>
  ServerAdmin [email protected]
  ServerName otherdomain.com
  ServerAlias www.otherdomain.com
  DocumentRoot /home/user/otherdomain.com/public_html
  ErrorLog /home/user/otherdomain.com/logs/error.log
  CustomLog /home/user/otherdomain.com/logs/access.log combined
</VirtualHost>

<VirtualHost *:443>
  ServerAdmin [email protected]
  ServerName otherdomain.com
  ServerAlias www.otherdomain.com
  DocumentRoot /home/user/otherdomain.com/public_html
  ErrorLog /home/user/otherdomain.com/logs/error.log
  CustomLog /home/user/otherdomain.com/logs/access.log combined
  SSLEngine on
  SSLCertificateFile /etc/apache2/ssl/otherdomain.com.crt
  SSLCertificateKeyFile /etc/apache2/ssl/otherdomain.com.key
  SSLCACertificateFile /etc/apache2/ssl/otherdomain.com.root.crt
  SSLCertificateChainFile /etc/apache2/ssl/otherdomain.com.chain.crt
</VirtualHost>

对于大多数浏览器来说,这在大多数情况下都可以正常工作,但是有时在特定设备上或随机时间,当我尝试转到“otherdomain.com”时,它会尝试获取“mydomain.com”的 SSL 证书,从而出现网络钓鱼/错误证书错误。

我读到 SNI 可能是解决方案,因此我在 Apache 配置中添加了以下内容:

<IfModule mod_ssl.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

然而,在我的 Apache 版本(2.4)中,该功能似乎已被淘汰,每当我重新启动 Apache 时都会得到确认:

# service apache2 restart
* Restarting web server apache2                                                                                                                                              
AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/apache2/ports.conf:17

似乎也没有解决问题,我仍然收到该错误。每次使用旧黑莓手机时我都能重现此问题。

除了必须使用 SSL 为每个 VirtualHost 获取唯一的 IP 地址之外,我还有哪些选项可以解决此问题?

另外,我的示例仅显示了 2 个域,但实际上我有 5 个域设置了自己的 SSL 证书。当我能够复制该问题时,它们都获取了第一个域的 SSL 证书。

非常感谢任何帮助。

答案1

基于名称的虚拟主机不会被淘汰。该NameVirtualHost设置被删除是因为它是多余的。其余配置将包含足够的信息,以便 Apache 知道是否必须启用该设置。

此外,SNI 并不是可以在服务器端打开或关闭的设置。要么客户端支持它并在发送给服务器的第一条消息中发送 SNI 字段,要么客户端不支持它,服务器对此无能为力。

您的选择是:

  • 为每个域获取单独的 IP 地址。
  • 更新尚不支持 SNI 的客户端以使用最新的软件。
  • 获得涵盖所有领域的单一证书。
  • 接受只有第一个域适用于所有客户端,其余域对于运行过时软件的少数客户端将会失效。

相关内容