TLS/SSL - SNI 对 Nginx 上运行的域数量有限制吗?

TLS/SSL - SNI 对 Nginx 上运行的域数量有限制吗?

SNI(服务器名称指示)是 TLS/SSL 协议的扩展,允许 Web 服务器在同一 IP 上为多个域提供服务,所有域都使用不同的 SSL 服务器证书。SNI 会发现适合他们所请求的域/URL 的 SSL 证书。在 SNI 之前,所有在同一 IP 和端口上侦听的虚拟主机都必须使用相同的 SSL 证书。

有人知道在同一个 IP 上可服务的域名数量是否有限制吗?

使用标准 http,没有限制。我只需为每个域指定一个不同的虚拟主机,然后 Web 服务器将客户端的“Host:”标头与匹配的 server_name 或 server_alias 虚拟主机进行匹配。SNI 的工作原理类似,但匹配 SSL 证书,并且一个 IP 上可能有数百个证书。我想知道是否有人知道 SNI 是否有限制或在同一个 IP 上有数百个证书时执行缓慢。

答案1

SNI 本质上与 HTTP 中的标头相同Host。主要区别在于Host标头仅位于 HTTP 请求中,因此只有在 TLS 握手成功完成后,Web 服务器才能看到它。相反,SNI 扩展是在 ClientHello 中发送的,即客户端在 TLS 握手中发送的初始消息。然后,服务器从 TLS 握手中提取 SNI 扩展以查找匹配的配置(包括证书),其方式与提取标头的值以查找Host匹配的配置相同。

基于此,SNI 与Host标头之间应该没有质的差异,也没有额外的限制。但会有一些量上的差异,因为与仅Host使用标头相比,使用 SNI 需要更多的内存:除了配置的 HTTP 部分外,SSL 部分也需要保存在内存中,即证书、证书链和私钥。

相关内容