Clash 文档中心中文使用手册

Clash 怎样核对请求主机名与证书错误描述

Clash 怎样核对请求主机名与证书错误描述。了解适用条件、操作步骤与常见问题的排查方法。

更新于 2026/10/4

核对请求主机名与证书相关错误时,要把两层信息分开:一层是请求打算访问的权威名(URI 中的主机以及 Host 所表达的名字),另一层是对端证书所声明、并在 TLS 中被用来匹配该名字的身份。只有握手完成并出现 HTTP 状态码时,才能用规范中的码来解释“这个权威名有没有打到能作答的服务器”。证书错误描述若停留在名字不匹配,通常还没有状态码;此时应用请求里的主机名去对照错误中的名字,而不是先改 HTTP 方法。

适用条件与应记录的字段

适用前提是你能同时看到:请求目标中的主机名、实际发起连接所用的名字,以及失败描述里出现的证书身份或匹配结果。若已有 HTTP 响应,再追加状态码及其类别(100–199、200–299、300–399、400–499、500–599)。未在常规列表中的码视为非标准响应,不能用来给证书错误定性。核对时保持原方法不变,避免把一次身份失败写成另一次不相关的资源失败。

400 Bad Request 的判断依据包括畸形请求语法、无效消息分帧,以及欺骗性请求路由。当错误描述是证书名字不匹配,同时请求行或 Host 又写着另一个主机时,应优先怀疑路由与名字被拆开。下一步是把 URI 权威名、Host 与证书错误中的名字写成同一组对照,三处不一致就不要解释为 404 一类“资源不存在”。

用 421 把“主机名”映射到“这个服务器能不能答”

421 Misdirected Request 的定义是:请求被导向无法产生响应的服务器,可出现在服务器未配置为该请求 URI 中 scheme 与 authority 组合作答的时候。这是把证书错误描述翻译成 HTTP 语言时最接近的码。对照方法是:取出请求 URI 的 scheme 与 authority,看它们是否正是证书错误里提到的那个名字;若证书说名字不配,而后来(在校验被绕过或名字被改写后)又出现 421,即可判断权威名从未落到正确的虚拟主机或证书覆盖范围。下一步是改回证书能够覆盖的主机名,而不是根据路径去猜资源。

200 OK 只说明对端认为请求成功:GET 会取出资源到消息体,HEAD 没有消息体。304 Not Modified 只说明可以沿用缓存。它们都不含主机名是否匹配证书的信息。若证书错误描述仍是名字失败,却有人用一次 200 来宣称已经核对完毕,判断上应视为层析错位——成功码没有否定证书错误。203 则标明元数据并非源站原样,更不能用来给证书名字背书。

3xx 需要核对 Location 中的主机是否仍等于当前正在校验的名字。301 与 308 为永久换址,302 与 307 为暂时换址;307 与 308 跟随时不得改方法。证书错误若出现在跟随之后,应把 Location 里的新主机当作下一轮对照对象,而不是继续用第一跳的名字去读旧的错误描述。305 已废弃,不能当作核对主机名的合法指示。

失败时如何读错误描述并决定下一步

若没有任何状态码,错误描述应直接与请求主机名比对:描述中的期望名是否等于 URI 权威名,实际对端名是否另一值。二者不等,结论就是身份校验失败,下一步是让请求主机名回到证书覆盖集合,而不是解释 401 或 403。401 表示未认证,403 表示已知身份但无权限,404 表示找不到资源(也可能被用来隐藏资源存在性)。这些码都要求 HTTP 已经发生,不能回填到纯证书名字错误上。

407 要求向代理认证,511 要求为获得网络访问而认证,它们描述的是代理或接入网络,不是源站证书主体。502 表示网关拿到无效上游响应,504 表示网关超时,503 表示暂时无法处理(维护或过载),若有 Retry-After 应参考其估计时间且通常不缓存暂时响应。当证书错误描述与 502/504 同时出现时,应分开记录:哪一步是名字不匹配,哪一步是上游无有效响应,避免把网关码当成证书已匹配的证据。

408 可能只是空闲连接被关闭,425 拒绝可能重放的请求,412 与 428 围绕条件请求。它们与证书主体名无直接对应。核对清单可以收束为三句:请求主机名是什么;证书错误描述里的名字是什么;若已有状态码,该码是否为 421 或 400 所覆盖的错向/欺骗性路由。三者对上,才能说“主机名与证书错误”已经核对完毕;对不上,就不要用 2xx 或 404 结束这次判断。

资料来源

https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status

返回文章索引使用教程