基于主机头的SSL证书select:有可能吗?

Web服务器是否可以根据传入连接的主机头select要使用的SSL证书,还是仅在SSL连接build立之后可用的信息?

也就是说,我的networking服务器可以在端口443上列出,如果请求https://foo.com ,可以使用foo.com证书,如果请求https://bar.com ,我可以使用bar.com证书,或者我正在尝试这是不可能的,因为服务器在知道客户端需要什么之前必须build立一个SSL连接?

历史上,你的第一个陈述是准确的。 现在有多种select:

  • 通配符证书,如果在同一个域内的子域名。
  • SAN / UCC证书指定证书的替代名称,从而能够提供多个证书。
  • 引入了SNI以在Host头之后build立SSL连接。 然而,这种支持有限,因为它更新。

这已经被我自己和其他人在ServerFault上无数次的回答了。 除非有特定的问题,否则我build议您search更多的细节。

为了扩展Warner的答案:CAcert的页面Vhost Task Force比较了在单个服务器上使用多个域的几种方法。 我个人使用服务器名称指示 。

简短的回答:

HTTP封装在SSL内部 ,所以在build立连接之前,任何关于请求的信息都是不可访问的。 因此,直到证书给客户。 没有办法使用标题或任何其他encryption信息,因为它们仍然不可用。

编辑:这是真实的,如果你想现在是跨浏览器和完全便携。 正如其他人所说,在不久的将来,有一些新的方法可以使之成为可能。

还是仅在SSL连接build立之后可用的信息?

正确。 在发送HTTP请求的任何部分(包括主机头)之前build立SSL连接。