2011-08-28 54 views
-1

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

+2

请回顾[这个问题](http://stackoverflow.com/questions/5316513/is-ssl-possible-with-virtual-hosting-on-one-ip)及其答案。 –

回答

2

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

+0

您的陈述不正确 - TLS的服务器名称扩展使这些要求过时。 –

+0

据我所知,该扩展的支持尚未广泛部署。 – cdhowie

+0

所有主流浏览器和几乎所有(如果不是全部)TLS库都支持它。我相信,所有主流服务器都支持它。 –

-1

这样做的基础是为每个虚拟服务器提供一个SSL密钥(set)。例如,在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服务器。

由于证书和域名匹配,您不会收到任何错误。

+0

这只有在每个SSL虚拟主机绑定到不同的IP地址或端口时才有效。 – cdhowie

+1

如果头文件被加密,服务器如何知道应用哪个VirtualHost? (这是提问者想知道的问题。) –

+0

@cdhowie我不确定这一点,我知道我的一个共享主机帐户可以与证书一起工作,只要域匹配即可。这是一个共享的知识产权,但他们是如何在后台建立起来的,我不知道。 – ssube

1

在TLS之前,服务器确实没有办法知道它应该呈现给客户端的哪个主机的证书,并且这导致了问题。

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