验证共享主机上的SSL证书

时间:2011-08-28 08:47:38

标签: ssl https

根据this question我们使用HTTPS时的所有HTTP标头都是加密的(包括请求URI和主机标头)。
当浏览器想要浏览使用HTTPS的网站上的页面时,它首先创建安全连接,然后发送HTTP请求(加密),服务器将答案返回给浏览器。现在假设有多个安全网站有多个SSL证书,所以当服务器想要创建安全连接时,它如何检测应该使用哪个证书,因为它对请求一无所知!!!

3 个答案:

答案 0 :(得分:2)

由于在接收Host标头之前协商了SSL通道,因此HTTPS服务器每个绑定的IP端点(IP地址和端口)最多只能使用一个证书。换句话说,要使用两个不同的SSL证书,您需要将每个虚拟主机绑定到不同的端口或不同的IP地址。

答案 1 :(得分:1)

在TLS之前,服务器确实无法知道应该向客户端呈现哪个主机的证书,这会导致问题。

在TLS中有一个名为Server Name的特殊扩展(见RFC 3546),它允许客户端告诉服务器,客户端想要连接的主机。根据此扩展的内容,服务器可以提供适当的证书。当然,所有这些都要求双方都支持和使用TLS和扩展本身。

答案 2 :(得分:-1)

此基础是为每个虚拟服务器提供SSL密钥(集)。

例如,在Apache中,它相对简单。每个共享站点都可能在<VirtualHost>指令中。可以在其中指定SSL密钥,因此仅适用于该虚拟主机。

粗略的例子:

<VirtualHost *:443>
    ServerName server.com

    SSLEngine on
    SSLCertificateKeyFile /etc/ssl/server_com.key
    SSLCertificateFile /etc/ssl/server_com.crt
    SSLCertificateChainFile /etc/ssl/server_com.ca-bundle

然后,服务器将使用指定的密钥来处理通过HTTPS定向到该站点的所有请求。 Further details on the Apache site。类似的事情应该适用于大多数支持虚拟主机概念的Web服务器。

您将不会收到任何错误,因为证书和域名匹配。