在同一IP地址上无法拥有多个SSL域。
背景
当客户端联系https网站时,所有通信都使用站点的公钥(ssl证书)进行加密。只有与公钥关联的私钥才能解密http请求。基本上这就是https工作原理。因此,在您的虚拟主机中,您为每个ssl网站定义证书和密钥。
SSLCertificateFile /etc/apache2/ssl/example2.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example2.com.key
基于VirtualHost名称和SSL
当您使用基于VirtualHost名称时,当Apache接收到客户端请求时,服务器会读取请求并查看所请求的域名。当识别出域名时,Apache会读取虚拟主机指令并返回正确的网站。
当Apache接收到SSL请求时,系统无法解密消息,因为Apache需要使用Virtualhost中定义的SSLCertificateKeyFile,但要知道要使用哪个虚拟主机,他需要能够解密消息....
因为Apache不知道如何处理您的请求,所以系统返回第一个处理的虚拟主机。
这就是为什么您需要使用基于IP的虚拟主机,这就是示例中使用的内容:
在Apache上托管多个SSL证书
您有两个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通配符证书
如果私钥和公钥(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设置。
祝您拥有愉快的一天。