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