我需要从单个 IP 使用 SSL 托管多个 Apache 虚拟主机。
现在 - 我明白了,因为 SSL 会包裹 HTTP 请求,所以在先将公钥发送给客户端之前,无法知道请求的是哪个主机。这实际上破坏了 SSL 虚拟主机使用标准 SSL 证书的可能性。
我已获得统一通信证书 (UCC),也称为主题备用名称 (SAN) 证书。这样我就可以为多个域提供同一份证书。
我希望这是 Apache 提供的证书任何SSL 请求 - 一旦建立加密,就让 Apache 像往常一样解析虚拟主机。
我应该如何配置 Apache?我曾尝试研究如何做到这一点,但我所能找到的只是说这是可能的引文,但没有具体内容:
wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI
虽然 Apache 可以在看到请求中的主机名后重新协商 SSL 连接(并且确实这样做了),但在初始握手期间选择用于匹配请求主机名的正确服务器证书已经太晚了,从而导致浏览器出现有关证书中包含错误主机名的警告/错误。
serverfault.com/questions/48334/apache-virtual-hosts-with-ssl
顺便说一句,可以在一个 IP 地址上拥有多个 SSL 保护的命名虚拟主机 - 我在我的网站上这样做 - 但它会在 Apache 日志中产生各种警告,并在浏览器中产生证书警告。我当然不会建议在需要看起来干净的生产站点上使用它。 -David 7 月 31 日 4:58
www.digicert.com/subject-alternative-name.htm
虚拟主机 单个 IP 地址上有多个 SSL 站点。在单个服务器上托管多个启用 SSL 的站点通常需要每个站点具有唯一的 IP 地址,但具有主题备用名称的证书可以解决此问题。Microsoft IIS 6 和 Apache 都能够使用统一通信 SSL(也称为 SAN 证书)虚拟托管 HTTPS 站点。
请帮忙。
答案1
我在我的 apache 2.2.14 实例上测试了这一点并且运行良好:
使用 NameVirtualHost 指令(到 ports.conf):
NameVirtualHost *:443
定义你的虚拟主机:
<VirtualHost *:443>
ServerName www.siteA.com
DocumentRoot "/opt/apache22/htdocs/siteA"
SSLCertificateFile "/path/to/my/cert"
SSLCertificateKeyFile "/path/to/my/key"
</VirtualHost>
<VirtualHost *:443>
ServerName www.siteB.com
DocumentRoot "/opt/apache22/htdocs/siteB"
SSLCertificateFile "/path/to/my/cert"
SSLCertificateKeyFile "/path/to/my/key"
</VirtualHost>
我用过这个关联作为资源。