首页 / 内容指南 / 当前文章

SNI、ALPN、HTTP Host和证书SAN有什么区别?

发布于 2026-08-26 · xieyipai.com 编辑部

SNI在TLS握手期间告诉服务器客户端想访问哪个主机名,服务器可据此选择证书和安全策略;ALPN在TLS握手中协商连接随后使用的应用层协议,例如HTTP/2;HTTP Host 或 HTTP/2、HTTP/3中的 :authority 标识请求针对哪个主机与端口;证书SAN列出证书声明覆盖的身份名称,供客户端执行服务器身份校验。

本文目录(19 节)

直接答案

SNI在TLS握手期间告诉服务器客户端想访问哪个主机名,服务器可据此选择证书和安全策略;ALPN在TLS握手中协商连接随后使用的应用层协议,例如HTTP/2;HTTP Host 或 HTTP/2、HTTP/3中的 :authority 标识请求针对哪个主机与端口;证书SAN列出证书声明覆盖的身份名称,供客户端执行服务器身份校验。

它们可能包含相同域名,却不是同一个字段,也不能互相替代。典型HTTPS流程是先连接IP,再发送包含SNI和ALPN的TLS ClientHello,验证服务器返回的证书是否覆盖目标主机,TLS完成后才发送带 Host 或 :authority 的HTTP请求。

一、四个概念对比

↔ 表格可左右滑动查看完整内容
名称所在层级与阶段谁发送或提供主要用途
SNITLS握手客户端表明希望连接的服务器名称
ALPNTLS握手客户端列出、服务器选择协商后续应用协议
Host / :authorityHTTP请求HTTP客户端标识目标URI的主机和可选端口
证书SANX.509证书服务器出示的证书声明证书覆盖的DNS名、IP等身份

排障时应按出现顺序观察,而不是看到一个域名相同就认为其他字段一定正确。

二、SNI是什么

RFC 6066定义了TLS server_name 扩展。客户端通过域名定位服务器时,通常在ClientHello中携带主机名。共享同一IP和端口的服务器可以根据SNI选择合适的证书、虚拟站点或安全策略。

SNI不负责DNS解析,也不是HTTP头。DNS先把域名解析为地址,客户端才能建立到该地址的连接;SNI随后出现在TLS握手。若直接用IP连接且客户端未发送预期SNI,共享服务器可能返回默认证书或拒绝握手。

三、ALPN是什么

RFC 7301定义应用层协议协商扩展。客户端在ClientHello中发送其支持的协议标识列表,服务器选择一个并在握手中返回结果。常见标识包括HTTP/2使用的 h2 和HTTP/1.1使用的 http/1.1。

ALPN回答“这条加密连接里接下来讲哪种应用协议”,不回答“访问哪个域名”。一个连接可以同时携带SNI www.example.com 和ALPN候选 h2,http/1.1,两者职责独立。

四、HTTP Host是什么

RFC 9110规定,HTTP请求中的 Host 提供目标URI的主机和端口信息,使同一服务器能区分多个主机名对应的资源。在HTTP/2和HTTP/3中,这项信息有时由 :authority 伪头字段承载。

Host属于HTTP阶段。对于HTTPS,服务器通常要先完成TLS握手和证书处理,之后才能读取普通HTTP请求。因此,不能依赖Host来完成握手前的证书选择。

五、证书SAN是什么

SAN是X.509证书的Subject Alternative Name扩展。RFC 5280规定,DNS身份可放在其中的 dNSName 项,IP身份则使用相应IP地址形式。一张证书可以包含多个SAN,从而声明覆盖多个名称。

SAN不是客户端对目标名称的提示,而是证书对身份覆盖范围的声明。客户端还必须验证证书链、有效期、用途和目标名称匹配;“证书里出现某个名字”并不单独证明证书可信。

六、完整HTTPS连接顺序

  1. 客户端从URL取得目标主机名和端口。
  2. DNS或本地解析得到目标IP地址。
  3. 客户端与IP建立TCP连接,或为HTTP/3建立基于UDP的QUIC连接。
  4. TLS ClientHello携带SNI,并可携带ALPN协议候选。
  5. 服务器依据配置选择证书和应用协议。
  6. 客户端验证证书链及SAN与目标身份是否匹配。
  7. TLS握手成功后,客户端发送HTTP请求,其中包含Host或:authority。
  8. Web服务器或反向代理再按HTTP主机与路径路由到应用。

不同协议版本会改变传输细节,但这条“定位地址、TLS协商、身份校验、HTTP路由”的逻辑链仍可用于诊断。

七、SNI和Host为什么通常相同

普通浏览器访问 https://api.example.com/path 时,SNI和HTTP authority通常都来自URL中的 api.example.com,所以看起来相同。这种一致性让共享主机先在TLS层选择正确证书,再在HTTP层选择正确站点。

但代理、网关、测试工具或错误配置可能让两者不同。例如,连接时用一个SNI通过TLS握手,随后发送另一个Host。RFC 6066提醒,依赖两者一致的服务器实现必须检查差异,不能默认它们永远相同。

八、SNI和SAN有什么区别

SNI是客户端提出的目标名称;SAN是服务器证书声明覆盖的名称。服务器可根据SNI选择一张包含匹配SAN的证书,客户端再验证匹配关系。

如果SNI正确但证书SAN不覆盖目标域名,通常出现名称不匹配错误。如果SNI错误,服务器可能选错证书,最终也表现为证书错误。两类故障表面相近,抓取握手信息才能区分。

九、ALPN和SNI有什么区别

SNI选择服务器名称上下文,ALPN选择连接上的应用协议。SNI正确但ALPN没有共同协议时,服务器可能终止握手,或按实现回退。ALPN协商出HTTP/1.1而不是HTTP/2时,站点仍可能正常打开,只是使用不同协议版本。

排查“域名可达但HTTP/2没有启用”时,应看ALPN结果;排查“同IP返回错误站点或错误证书”时,应优先看SNI和证书选择。

十、Host和证书SAN有什么区别

Host用于HTTP请求路由,SAN用于TLS服务器身份验证。服务器即使接受任意Host,客户端也不应因此忽略证书名称错误。反过来,证书覆盖多个域名也不代表HTTP服务器为这些域名都配置了正确虚拟主机。

因此会出现“证书验证成功但返回404”的情况:TLS层身份可接受,HTTP层却没有对应Host路由。也会出现“服务端能返回页面但浏览器拦截”的情况:HTTP路由存在,证书身份却不匹配。

十一、HTTP/2与HTTP/3为什么常看到:authority

HTTP/1.1使用 Host 头字段传递目标主机与端口。HTTP/2和HTTP/3使用控制数据中的 :authority 伪头字段表达相应URI authority;RFC 9110说明Host在这些版本中有时由:authority替代。

反向代理在协议版本之间转换时,应正确映射Host和:authority。若二者冲突或被错误重写,可能出现421 Misdirected Request、错误虚拟主机或缓存键混乱。

十二、代理协议配置中为什么会同时出现这些名称

某些传输配置会分别要求连接地址、TLS server name、ALPN、HTTP Host或路径。它们对应不同阶段,允许网关和虚拟主机按各自层级处理连接。字段名称由具体实现定义,不能把一种客户端的配置直接套到另一种实现。

排障时先确认每个字段属于DNS、TLS还是HTTP,再核对客户端与服务端版本。不要为了让连接成功而随意关闭证书验证;这会掩盖身份错误并削弱安全边界。

十三、常见故障如何定位

返回默认证书

检查客户端是否发送了预期SNI,以及服务器是否为该SNI配置正确证书。只修改HTTP Host通常无法修复握手阶段的证书选择。

证书名称不匹配

核对URL目标主机、SNI和证书SAN。不要只看证书Subject显示名称,也不要用忽略验证作为长期方案。

HTTP/2没有协商成功

查看客户端ALPN候选和服务器选择结果,确认双方支持 h2 且TLS配置满足实现要求。Host正确与否不能证明ALPN成功。

TLS成功但访问错误站点

检查Host或:authority是否被代理重写,并查看反向代理虚拟主机规则。此时证书正确不代表HTTP路由正确。

十四、安全检查边界

  • 不把关闭证书验证当作兼容模式。
  • 不将SNI相同误认为证书链可信。
  • 不接受与目标身份无关的SAN条目。
  • 不让代理在未经验证时信任任意Host进行内部路由。
  • 分享日志前遮盖认证信息、内部域名和真实节点地址。
  • 使用最小测试域名复现,不上传完整生产配置。

十五、最小验证方法

固定一个URL,记录DNS结果、目标IP和端口。用能显示TLS握手信息的本地工具核对SNI、服务器证书SAN与ALPN结果,再查看HTTP请求中的Host或:authority和响应状态。每次只改变一个字段并建立新连接。

若经过反向代理,分别保存入口与上游的脱敏日志。这样可以判断字段是在客户端生成错误、TLS终止点选择错误,还是HTTP转发时被改写。

十六、FAQ

SNI正确就一定不会出现证书错误吗?

不一定。服务器仍可能返回错误、过期或不受信任的证书,SAN也可能不覆盖目标名称。客户端必须完成整套证书验证。

Host可以代替SNI吗?

不能。HTTPS服务器在读取普通HTTP Host之前通常已完成TLS握手,需要SNI帮助选择证书和TLS上下文。

ALPN会决定访问哪个网站吗?

ALPN主要决定连接使用哪种应用协议,不负责选择域名。网站身份与路由还涉及SNI、证书和HTTP authority。

SAN里有通配符就覆盖所有子域名吗?

不能笼统判断。匹配规则受证书身份验证规范和客户端实现约束,通配符通常也不会无限跨越多个标签。应以目标名称的实际验证结果为准。

用IP访问HTTPS为什么经常报证书错误?

证书常为DNS名称签发,直接用IP访问时目标身份变成IP;若证书SAN没有对应IP地址,名称验证会失败,且服务器可能因缺少正确SNI返回默认证书。

十七、结论

SNI告诉TLS服务器目标主机,ALPN协商后续应用协议,Host或:authority标识HTTP请求目标,证书SAN声明服务器证书覆盖的身份。它们在一条连接中前后衔接,却承担不同职责。按DNS、TLS名称、协议协商、证书验证和HTTP路由的顺序检查,能避免把所有问题都归因于“域名配置错误”。

核验来源