Apache有两个URL和两个不同的SSL证书

时间:2010-08-30 15:26:15

标签: django apache ssl nginx

我会问一个例子 - 我有一个设置,nginx,django,apache(nginx转发ssl请求到apache)

我的网站https://www.xyz.com有一个与之关联的ssl证书,客户在连接时会使用它。 可以说,我有另一个域名www.abc.com,我想把它分配到与xyz.com相同的服务器

当用户在浏览器https://www.abc.com/中输入内容时,它应显示与https://www.xyz.com/相同的网站。

现在要实现这一目标,我是否需要购买另一张ssl证书?如果我这样做,我如何更改http.conf文件以将此新证书用于另一个URL?

或者我可以使用其他方法吗?

4 个答案:

答案 0 :(得分:1)

只要www.abc.com和www.xyz.com拥有不同的IP地址,您就可以从同一个httpd实例托管它们。您将需要两个证书(除非两个证书都是公共域的子域,并且您获得了通配符证书)。将它们设置为两个基于IP的虚拟主机,具有相同的内容。

请参阅http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#vhosts了解原因。

<VirtualHost 127.0.0.1:443>
    SSLEngine on

    SSLCertificateFile      /etc/ssl/www.abc.com.crt
    SSLCertificateKeyFile   /etc/ssl/www.abc.com.key
    # etc
</VirtualHost>
<VirtualHost 127.0.0.2:443>
    SSLEngine on

    SSLCertificateFile      /etc/ssl/www.xyz.com.crt
    SSLCertificateKeyFile   /etc/ssl/www.xyz.com.key
    # etc
</VirtualHost>

答案 1 :(得分:1)

你真的试过问谷歌吗?我的第一个点击之一是:http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI
在apache wiki上。

如果您有多个IP地址,我建议使用基于IP地址的SSL而不是基于名称的,因为较旧的客户端(XP上的IE)不支持SNI。

答案 2 :(得分:1)

(我正在复制/粘贴我自己的this question答案的略微修改版本。到目前为止,现有答案中没有提出的是使用多个主题替代名称。)

简单的方法是能够在两个不同的IP地址(可能是同一台机器)上托管www.abc.comwww.xyz.com,在这种情况下,您可以为每个IP地址配置不同的证书。

如果你被限制为这两个名称拥有一个IP地址(和端口),如果你想使用两个不同的证书,你需要使用相对较新的Server Name Indication (SNI)扩展名(并且可能不受所有浏览器的支持,但它似乎适用于最近的浏览器。)

如果您不能使用SNI,则需要同一个证书同时对www.abc.comwww.xyz.com都有效,这可以通过将两个DNS条目放入如果两个主机的模式合适,则可以使用通配符(或者通过使用通配符)(请注意,如果通配符是针对两个不同的域而不是子域,则不太可能接受通配符)。这两个选项可能比两个不同的证书(商业CA)更昂贵。

答案 3 :(得分:1)

我最终为两个域购买单个多域证书(UCC)。 并修改了nginx配置,将两个站点定向到同一个Apache服务器。

因为我在Apache面前有nginx,所以我不需要更改http.conf配置。