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

Dan*_*iot 5 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
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)

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

在apache上托管多个SSL证书

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

我在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

虚拟主机名称基础和 SSL

当您使用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)

VirtualHost 名称基础和 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>
Run Code Online (Sandbox Code Playgroud)

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

祝你今天过得愉快。

  • “*在同一个 IP 地址上不可能有多个 SSL 域。*”可以使用 SNI(服务器名称指示),这就是问题所在。 (5认同)