在同一个 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 设置。
祝你今天过得愉快。