Apache SNI:一个IP地址上的多个SSL证书

时间:2013-07-31 21:30:01

标签: apache ssl sni

今天我正在尝试将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.

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

hosting multiple SSL certs on apache

但从我可以告诉我的服务器已经正确配置(显然它不是!)

我在example2.com的conf文件中有以下指令

ServerName  example2.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/example2.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example2.com.key
它对我来说是正确的。那么为什么apache在访问example2时会提供example1的证书?

3 个答案:

答案 0 :(得分:3)

结果将域1配置为

<VirtualHost *:443>

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

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

答案 1 :(得分:3)

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

NameVirtualHost *:443

您可以在this post

中阅读详细信息

答案 2 :(得分:-7)

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

context

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

  

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

VirtualHost名称库和SSL

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

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

这就是为什么你需要使用VirtualHost ip base它在示例中使用的内容:
hosting multiple SSL certs on apache 你有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名称库和SSL通配符证书

如果所有域的私钥和公钥(ssl certificat)相同,则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设置。

度过愉快的一天。