6

今天我正在尝试将 Apache 配置为运行两个域,每个域都有自己的 SSL 证书。根据我的阅读,只要我的 Apache 配置了最新版本的 OpenSSL,SNI 就支持这一点。我验证它是:

[notice] Apache/2.2.22 (Ubuntu) PHP/5.3.10-1ubuntu3.7 with Suhosin-Patch mod_ssl/2.2.22 OpenSSL/1.0.1 configured -- resuming normal operations

我以为我已经成功设置了第二个域和证书,​​但是当我尝试在 chrome 中访问第二个域时,出现以下错误:

You attempted to reach example2.com, but instead you actually reached a server identifying itself as example1.com.

这篇文章似乎最接近我的问题:

在 apache 上托管多个 SSL 证书

但据我所知,我的服务器已经正确配置(显然不是!)

对于 example2.com,我的 conf 文件中有以下指令

ServerName  example2.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/example2.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example2.com.key

在我看来是对的。那么为什么当我访问 example2 时 apache 会提供 example1 的证书?

4

3 回答 3

3

原来域 1 被配置为

<VirtualHost *:443>

我使用 webmin,它只会在您直接查看指令时显示该详细信息。

更改 * 是解决方案的一部分,但引入了其他一些问题。我想我会下注并做基于 IP 的 SSL。

于 2013-08-01T20:13:47.827 回答
3

我将此添加到 ports.conf (Apache/2.2.22)

NameVirtualHost *:443

您可以在这篇文章中阅读详细信息

于 2014-01-22T07:29:11.807 回答
-7

在同一个 IP 地址上不可能有多个 SSL 域。

语境

当客户联系 https 网站时,所有通信都使用该网站的公钥(ssl 证书)进行加密。只有与公钥关联的私钥才能解密 http 请求。基本上这就是https 的工作方式。
这就是为什么在您的虚拟主机中,您为每个 ssl 网站定义证书和密钥

SSLCertificateFile /etc/apache2/ssl/example2.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example2.com.key

虚拟主机名称库和 SSL

当您使用VirtualHost name base时,当 apache 收到客户端请求时,服务器会读取请求并查看请求的域名。当域名被识别时,apache 读取virtuahost指令并返回好的网站。

当 apache 收到 SSL 请求时,系统无法解密消息,因为 apache 需要使用 Virtualhost 中定义的SSLCertificateKeyFile但要知道要使用哪个虚拟主机,他需要能够解密消息....因为 apache 不' t 知道如何处理您的请求系统返回第一个处理的虚拟主机。

这就是为什么您需要使用示例中使用的VirtualHost ip base :
在 apache 上托管多个 SSL 证书 您有 2 个 ip 1.1.1.1 和 2.2.2.2

NameVirtualHost 1.1.1.1:443
NameVirtualHost 2.2.2.2:443
<VirtualHost 1.1.1.1:443>
  ServerName www.domain1.com
  ...
  ...
</VirtualHost>
<VirtualHost 2.2.2.2:443>
  ServerName www.domain2.com
  ...
  ...
</VirtualHost>

VirtualHost Name base 和 SSL 通配符证书

如果所有域的私钥和公钥(ssl 证书)都相同,则 apache 将能够解密通信。仅当您对域使用通配符证书时才会附加这种情况。例如,如果您有 *.domain.com 的通配符,您可以像这样定义 VirtualHost 名称库

NameVirtualHost 1.1.1.1:443

<VirtualHost 1.1.1.1:443>
   ServerName  foo.domain.com
   SSLEngine on
   SSLCertificateFile /etc/apache2/ssl/wildcard.domain.com.crt
   SSLCertificateKeyFile /etc/apache2/ssl/wildcard.domain.com.key
   ... 
   ...
</VirtualHost>

<VirtualHost 1.1.1.1:443>
   ServerName  bar.domain.com
   SSLEngine on
   SSLCertificateFile /etc/apache2/ssl/wildcard.domain.com.crt
   SSLCertificateKeyFile /etc/apache2/ssl/wildcard.domain.com.key
   ... 
   ...
</VirtualHost>

此配置将起作用,因为无论域如何,apache 都使用相同的私钥来解密通信,因此系统将能够选择好的 VirtualHost 设置。

祝你今天过得愉快。

于 2013-08-01T12:59:44.853 回答