今天我正在尝试将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
Run Code Online (Sandbox Code Playgroud)
我以为我已经成功设置了第二个域和证书,但是当我尝试访问chrome中的第二个域时,我收到以下错误:
You attempted to reach example2.com, but instead you actually reached a server identifying itself as example1.com.
Run Code Online (Sandbox Code Playgroud)
这篇文章似乎最接近我的问题:
但从我可以告诉我的服务器已经正确配置(显然它不是!)
我在example2.com的conf文件中有以下指令
ServerName example2.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/example2.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example2.com.key
Run Code Online (Sandbox Code Playgroud)
它看起来对我来说.那么为什么apache在访问example2时会提供example1的证书?
小智 -7
同一 IP 地址上不可能有多个 SSL 域。
当客户端联系 https 网站时,所有通信均使用该网站的公钥(ssl 证书)进行加密。只有与公钥关联的私钥才能解密 http 请求。基本上这就是https 的工作原理。
这就是为什么在虚拟主机中,您为每个 ssl 网站定义证书和密钥
SSLCertificateFile /etc/apache2/ssl/example2.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example2.com.key
当您使用VirtualHost name base时,当 apache 收到客户端请求时,服务器会读取该请求并查看所请求的域名。当域名被识别后,apache 读取virtuahost指令并返回正确的网站。
当apache收到SSL请求时,系统无法解密该消息,因为apache需要使用虚拟主机中定义的SSLCertificateKeyFile,但要知道要使用哪个虚拟主机,他需要能够解密该消息....因为apache不'不知道如何处理您的请求,系统返回处理的第一个虚拟主机。
这就是为什么你需要使用VirtualHost ip 基础,它在示例中使用什么:
在 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>
Run Code Online (Sandbox Code Playgroud)
如果所有域的私钥和公钥(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>
Run Code Online (Sandbox Code Playgroud)
此配置将起作用,因为无论在哪个域,apache 都使用相同的私钥来解密通信,因此系统将能够选择良好的 VirtualHost 设置。
祝你今天过得愉快。
| 归档时间: |
|
| 查看次数: |
11869 次 |
| 最近记录: |