Web 服务器是否可以根据传入连接的主机头选择要使用的 SSL 证书,或者该信息是否仅在建立 SSL 连接后才可用?
也就是说,我的网络服务器是否可以在端口 443 上列出并使用 foo.com 证书,如果https://foo.com被请求,并且 bar.com 证书如果https://bar.com被请求还是我试图做一些不可能的事情,因为服务器必须在知道客户端想要什么之前建立 SSL 连接?
答案1
从历史上看,您的第一句话是正确的。现在,有多个选项:
- 如果子域名位于同一域内,则使用通配符证书。
- SAN/UCC 证书用于指定证书的备用名称,从而能够提供多个证书。
- 引入 SNI 是为了在 Host 标头之后建立 SSL 连接。但由于它较新,因此支持有限。
我和其他人已经在 ServerFault 上多次回答过这个问题。除非您有具体问题,否则我建议您搜索更多详细信息。
答案2
答案3
简短回答:不
HTTP 被封装SSL 内部,因此在建立连接之前,有关请求的任何信息都无法访问。因此,直到证书已提供给客户端。无法使用标头或任何其他加密信息,因为它们仍然不可用。
编辑:如果你想的话这是真的如今跨浏览器并完全可移植。正如其他人所说,在不久的将来,一些新兴方法将使之成为可能。
答案4
或者该信息仅在建立 SSL 连接后才可用?
正确。在发送 HTTP 请求的任何部分(包括主机头)之前,就会建立 SSL 连接。