什么是 SSL 证书链?它是如何运作的
SSL 证书链可帮助浏览器和其他客户端验证网站的数字证书是否可信。当您通过 HTTPS 访问网站时,您的浏览器会检查其 TLS 证书,以确认它标识了所请求的域,并且可以通过受信任的证书颁发机构 (CA) 进行验证。此验证通常取决于将网站证书连接到受信任根证书的证书链。如果中间证书丢失或无法验证链,用户可能会遇到安全警告或连接错误。了解 SSL 证书链的工作原理有助于网站所有者、系统管理员和安全专业人员解决证书问题并维护可靠的 HTTPS 连接。
什么是 SSL 证书链?

SSL 证书链也称为信任证书链,是建立从网站证书到受信任根证书颁发机构的路径的数字证书序列。尽管 SSL 仍然是一个常用术语,但现代 HTTPS 连接使用传输层安全性 (TLS)。
典型的链包含三种类型的证书:网站的叶证书、一个或多个中间证书以及根证书。叶证书标识网站或服务器。中间证书允许委托证书颁发,而根证书在受客户端信任时充当信任锚。
例如,当浏览器连接到 HTTPS 网站时,它会验证该网站的证书,并尝试通过可用的中间证书构建一条到其信任存储中的根证书的受信任路径。它还检查主机名、有效期、数字签名和其他适用的证书要求。
有效的证书链有助于在 TLS 握手期间建立服务器的身份。但是,它并不能证明网站是合法的、没有恶意软件或由值得信赖的组织运营的。
SSL 证书信任链如何工作?

证书信任链允许浏览器和其他客户端使用受信任的机构颁发的证书来验证网站的证书。每个证书都链接到一个颁发机构,创建从网站证书到可接受的信任锚的路径。
第1步:网站出示证书
当浏览器通过 HTTPS 连接到网站时,服务器会在 TLS 握手期间提供其叶证书。该证书包含网站的公钥、域信息、颁发者详细信息、有效期和数字签名。
浏览器检查请求的主机名是否与证书的使用者备用名称 (SAN) 条目匹配以及证书是否满足适用的验证要求。
步骤2:中间证书建立下一个链接
网站的证书通常由中间 CA 颁发,而不是直接由根 CA 颁发。客户端使用中间证书的公钥来验证叶证书上的签名。
有些链包含多个中间证书。每个链接必须满足客户端的相关证书验证规则才能构建可信路径。
第 3 步:链到达受信任的根
根证书属于根证书颁发机构,并且通常是自签名的。浏览器和操作系统根据自己的信任策略维护受信任的根证书。
客户端尝试通过所需的中间证书将叶证书连接到受信任的根。服务器通常不需要发送根证书,因为客户端已经拥有其信任信息。
第 4 步:客户端验证链
客户端检查证书签名、有效期、主机名、证书约束和其他适用的要求。根据其配置,它还可能检查证书吊销信息。
如果客户端构建了有效路径并且通过了所需的检查,则它可以接受服务器的证书。否则,连接可能会产生证书警告或失败。
根证书与中间证书与叶证书

链中的每个证书都有特定的用途。了解这些差异有助于管理员正确配置 HTTPS 并排除证书错误。
1.叶子证书
叶证书也称为最终实体证书,用于标识网站或服务器。它包含公钥、域信息、颁发者、有效日期和数字签名。
服务器在 TLS 握手期间将此证书提供给客户端。客户端在接受连接之前检查其身份和有效性。
2. 中级证书
中间证书属于下级证书颁发机构,该颁发机构颁发证书或将颁发委托给另一个颁发机构。它将网站的证书连接到受信任的根证书。
中间 CA 允许根 CA 在委托证书颁发时保持其私钥更加隔离。如果所需的中间证书丢失并且无法通过其他可用机制获得,则客户端可能无法验证链。
3.根证书
根证书属于根证书颁发机构,并在被客户端的信任存储接受时充当信任锚。它通常是自签名的,但自签名并不会自动使证书受到信任。
客户端必须根据其配置的信任策略将根识别为受信任的。
特点 | 叶证书 | 中级证书 | 根证书 |
|---|---|---|---|
主要用途 | 标识网站 | 代表证书颁发 | 充当信任锚 |
发布者 | 通常是中间 CA | 根或另一个中间 CA | 通常是自签名 |
包含公钥 | 是的 | 是的 | 是的 |
由服务器发送 | 是的 | 通常,需要时 | 通常不需要 |
验证中的角色 | 建立服务器的认证身份 | 将叶子连接到信任锚 | 建立客户信任 |
因此,典型的链遵循以下路径:
网站证书→中间CA证书→可信根证书
确切的链取决于证书颁发机构、服务器配置和客户端可用的证书。
浏览器如何验证 SSL 证书链
浏览器在 TLS 握手期间验证证书链,以确定服务器的身份是否可信。
主机名验证
浏览器检查请求的域是否与证书的 SAN 条目匹配。颁发给的证书example.com可能不涵盖shop.example.com除非包含附加主机名或适当的通配符。
主机名不匹配可能会触发浏览器警告或导致连接被拒绝。
数字签名验证
数字签名帮助客户验证证书路径内的证书完整性和真实性。客户端使用颁发证书的公钥来验证正在检查的证书上的签名。
加密操作是此过程的核心。有关相关说明,请阅读 CyberLad 的指南网络安全中的哈希。
证书过期
证书的有效期由其定义不在此之前和不之后字段。客户在验证时检查相关证书是否有效。
过期的叶证书或中间证书可能会阻止成功验证。管理员应监控到期日期并确认更新的证书已正确安装。
信任库和证书路径
客户端尝试构建从叶证书到中间证书到可接受的信任锚的有效路径。它还检查适用的证书限制和密钥使用要求。
信任存储因操作系统、浏览器和应用程序而异。在一种环境中受信任的证书在另一种环境中可能不受信任。
证书吊销
如果证书的私钥被泄露或存在其他需要撤销的情况,则可以在到期日期之前撤销证书。证书颁发机构可以通过证书吊销列表 (CRL) 或在线证书状态协议 (OCSP) 发布吊销信息。
撤销检查行为因客户端而异。有些使用缓存信息或替代机制,因此成功的链验证并不总是意味着每个客户端都执行相同的撤销检查。
常见的 SSL 证书链错误及其原因

当客户端无法验证服务器提供的证书时,就会发生证书链错误。识别特定错误至关重要,因为每个问题都需要不同的修复方法。
1、证书链不完整
当服务器不提供所需的中间证书并且客户端无法使用其他可用证书构建可信路径时,就会出现不完整的链。
常见原因包括缺少中间证书、证书捆绑不正确以及服务器迁移后的配置更改。
如何解决:从证书颁发机构获取正确的中间证书,并将服务器配置为提供叶证书,后跟所需的中间证书。
2. 不受信任的证书颁发机构
当客户端无法将证书连接到可接受的信任锚时,客户端可能会拒绝链。对于尚未安装在客户端信任存储中的自签名证书或私有 CA 证书,可能会发生这种情况。
如何解决:对公共网站使用公众信任的 CA。对于内部应用程序,通过批准的信任管理流程分发组织的根证书。切勿仅仅为了绕过警告而安装未知的根证书。
3. 证书过期
过期的叶证书或中间证书可能会阻止成功验证。
如何修复它:检查有效期、续订或替换受影响的证书,并确保在每个相关 TLS 终止点安装更新的证书链。
4. 主机名不匹配
当证书的 SAN 条目未涵盖所请求的域时,就会发生主机名不匹配。
如何解决:安装涵盖所请求的主机名的证书。查看虚拟主机设置、服务器名称指示 (SNI) 和负载平衡器证书绑定。
5. 证书包不正确
服务器可能会提供错误的中间证书或顺序错误的证书包。
如何修复它:将叶证书的颁发者与配置的中间证书进行比较。在重新加载服务之前更正捆绑包并测试服务器配置。
6. 撤销或其他验证失败
证书可能会因已被吊销或不满足其他适用的证书要求而导致验证失败。
如何解决:检查证书的状态并查阅颁发 CA 的说明。更换已吊销的证书并调查原因。禁用证书验证并不是一个安全的解决方案。
如何检查 SSL 证书链
您可以使用在线测试服务或命令行工具检查公共网站的证书链。
方法 1:使用 SSL 实验室
Qualys SSL 实验室 SSL 服务器测试分析可公开访问的 TLS 服务器并报告证书和配置问题。
打开 SSL 实验室测试页面。
输入您要检查的域。
运行测试并等待分析。
查看证书详细信息和链信息。
调查有关信任、过期、缺少中间体或主机名验证的警告。
SSL Labs 对于外部测试非常有用,无需安装其他软件。避免提交敏感的内部主机名或系统,除非您的组织的策略允许使用外部服务。
方法 2:使用 OpenSSL 检查证书
OpenSSL 可以显示服务器在 TLS 连接期间提供的证书。运行:
openssl s_client -connect example.com:443 \
-服务器名称 example.com \
-showcerts替换example.com与目标域。
The -连接选项指定目的地和端口。-服务器名称选项通过 SNI 发送主机名,而-表演证书显示服务器发送的证书。
重要:显示证书并不能证明该链是可信的。使用验证选项检查证书路径和主机名。
方法 3:验证链和主机名
运行以下命令请求证书验证和主机名检查:
openssl s_client \
-连接 example.com:443 \
-服务器名称 example.com \
-验证返回错误\
-verify_hostname example.com查找验证成功的结果,如验证返回码:0(正常)。确切的输出取决于 OpenSSL 版本、信任存储和验证设置。
The -verify_return_error选项会导致返回验证错误,而不是允许命令在错误之后继续。参见官方 OpenSSL s_client 文档。
方法 4:检查发行者和到期详细信息
如果您已将叶证书保存为 PEM 文件,请运行:
openssl x509 -in 证书.pem -noout \
-主题-发行人-日期这将显示证书的主题、颁发者和有效期。使用输出检查颁发者是否与预期的 CA 匹配以及证书是否在有效期内。
如何修复不完整的 SSL 证书链

修复不完整的链通常涉及识别缺失的中间体、获取正确的证书包、配置 TLS 端点以及测试结果。
第 1 步:识别缺失的中间体
运行上面的 OpenSSL 命令或使用 SSL Labs 检查该链。检查服务器发送了哪些证书以及客户端是否可以构建可信路径。
验证失败并不总是意味着缺少中间体。还要调查过期、主机名不匹配和信任存储问题。
第 2 步:获取正确的证书包
从证书颁发机构的官方网站或证书管理门户下载所需的中间证书。确认证书与您的叶证书的颁发者相对应。
根证书通常已在客户端的信任存储中可用,并且通常不需要包含在服务器的证书捆绑中。
步骤3:配置Nginx
对于 Nginx,证书文件应首先包含叶证书,然后是所需的中间证书。
服务器{
监听 443 ssl;
服务器名称 example.com;
ssl_certificate /etc/ssl/certs/fullchain.pem;
ssl_certificate_key /etc/ssl/private/example.com.key;
}路径是示例。使用适合您环境的正确位置,并确保私钥受到适当权限的保护。
重新加载 Nginx 之前测试配置:
sudo nginx -t步骤 4:检查 Apache 和其他 TLS 端点
Apache配置可以使用SSL 证书文件提供叶子证书和必要的中间证书。请遵循适用于您的 Apache 版本和部署的文档。
如果 HTTPS 在反向代理、内容交付网络、Web 应用程序防火墙或负载均衡器处终止,请检查该层安装的证书。仅更新源服务器不会修复由单独代理提供的不正确的证书。
第 5 步:验证修复情况
进行更改后,重新运行 OpenSSL 和 SSL 实验室。确认服务器提供预期的证书并且客户端可以验证链和主机名。
对于具有多个服务器或 TLS 终止点的环境,请测试每个相关端点。一台服务器上的成功结果并不能保证所有端点都具有相同的配置。
SSL 证书链最佳实践
使用受信任的证书颁发机构
对公共网站使用公众信任的 CA。对于内部应用程序,将私有 CA 信任安全地分发给授权客户端。
自动续订和监控
在支持的情况下使用证书管理工具,并在证书过期之前提醒管理员。验证更新的证书是否已实际部署并由相关端点提供服务。
保护私钥
限制对证书私钥的访问,安全地存储它们,并避免将它们暴露在日志或公共存储库中。如果密钥遭到泄露,请更换受影响的证书并遵循适当的事件响应和撤销程序。
配置更改后验证
在续订、服务器迁移、负载平衡器更改或反向代理更新后测试证书链。检查主机名匹配、过期、链构建和验证错误。
维护证书库存
记录证书所有者、域、颁发 CA、到期日期、部署位置和续订方法。集中库存可帮助团队在中断期间快速找到受影响的服务。
监控第三方证书
证书问题可能会影响您的组织所依赖的服务,而不仅仅是您自己的网站。监控重要的外部 TLS 端点,包括身份提供商、支付网关和 API。 CyberLad 在中解释了这种更广泛的风险您的漏洞扫描程序无法发现的五个第三方风险。
使用安全 TLS 配置
有效的证书链只是 HTTPS 安全的一部分。使用受支持的 TLS 版本、适当的加密设置和安全密钥管理实践。受信任的证书并不能保证应用程序没有漏洞。
结论
SSL 证书链是 HTTPS 安全性的重要组成部分,因为它允许浏览器和其他客户端通过受信任的证书颁发机构的路径来验证网站的证书。了解叶证书、中间证书和根证书有助于管理员解决不完整的链、过期的证书和信任错误。定期监控、正确的服务器配置、安全的私钥管理和部署后验证有助于维护可靠的 TLS 连接。通过遵循这些做法,网站所有者和安全专业人员可以减少与证书相关的中断并提高其 HTTPS 基础设施的可靠性。
常见问题
什么是 SSL 证书链?
SSL 证书链是一系列数字证书,它建立从网站证书到受信任的根证书颁发机构的路径。它通常包括叶证书和一个或多个中间证书。
根证书和中间证书有什么区别?
根证书在被客户端接受后充当信任锚。中间证书委托证书颁发并将叶证书连接到受信任的根。
Web服务器是否需要发送根证书?
通常情况下,不会。服务器通常发送其叶证书和所需的中间证书。客户端通常已经在其信任存储中拥有其受信任的根证书。
如何查看SSL证书链?
使用SSL 实验室检查公共网站,或运行openssl s_client检查服务器提供的证书。检查链是否可信时包括主机名和证书验证选项。
SSL证书链不完整的原因是什么?
最常见的原因是缺少中间证书。不正确的证书捆绑、过时的配置以及服务器之间不一致的 TLS 设置也会阻止客户端构建有效的证书路径。
如何修复不完整的证书链?
从 CA 获取正确的中间证书,配置服务器以提供叶证书和必要的中间证书,并测试更新的配置。确切的步骤取决于服务器软件和 TLS 终止点。
SSL证书链与SSL证书相同吗?
不会。证书包含有关网站身份和公钥的信息。该链是用于建立从该证书到可接受的信任锚的可信路径的证书序列。
有效的证书链是否意味着网站安全?
不会。有效的链有助于根据客户的信任策略验证网站的认证身份。它不保证该网站是合法的、没有恶意软件或免受应用程序漏洞的影响。