今天我正在尝试将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的证书?
答案 0 :(得分:3)
结果将域1配置为
<VirtualHost *:443>
我使用webmin,它只在您直接查看指令时显示详细信息。
更改*是解决方案的一部分,但引入了一些其他问题。我想我会打算并做基于IP的SSL。
答案 1 :(得分:3)
答案 2 :(得分:-7)
在同一个ip地址上不可能有多个SSL域。
当客户联系https网站时,所有通信都使用网站的公钥(ssl certificat)进行加密。只有与公钥关联的私钥才能解密http请求。基本上就是https work的方式。
这就是为什么在您的虚拟主机中,您为每个ssl网站定义证书和密钥
SSLCertificateFile /etc/apache2/ssl/example2.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example2.com.key
当您使用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>
如果所有域的私钥和公钥(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设置。
度过愉快的一天。