Loading... # 网站证书从担心到不担心:证书链信任机制深度解析 ## 一、背景:为什么会担心证书到期? 假设一个网站域名是 `www.baidu.com`,由第三方客户通过 `curl` 进行调用。通过 `sitecertcheck` 工具检查发现,该网站的证书链中的中间证书有效期到 **2028 年**。 **问题来了**:到了 2028 年,用户的 `curl` 调用是否依然有效呢?证书过期后会不会导致 HTTPS 连接失败? 这是一个常见的担心,尤其是对于需要长期稳定运行的系统集成场景。 ## 二、证书链结构分析 ### 2.1 www.baidu.com 的证书链 使用 `sitecertcheck` 工具检查 `www.baidu.com` 的证书链,发现其证书链包含 **3 级证书**: ```mermaid graph TB subgraph "客户端信任库" Root[根证书<br/>GlobalSign Root CA<br/>系统预置信任] end subgraph "服务器返回的证书链" Server[#1 服务器证书<br/>CN=baidu.com<br/>📅 2026-08-10到期<br/>188天] Inter1[#2 中间证书<br/>GlobalSign RSA OV SSL CA 2018<br/>📅 2028-11-21到期<br/>1021天] Inter2[#3 中间证书<br/>GlobalSign Root CA - R3<br/>📅 2028-01-28到期<br/>724天] end Server -->|签发| Inter1 Inter1 -->|签发| Inter2 Inter2 -->|签发| Root style Server fill:#e3f2fd style Inter1 fill:#fff3e0 style Inter2 fill:#fff3e0 style Root fill:#e8f5e9 ``` ### 2.2 证书链关键信息摘要 | 级别 | 证书类型 | 主题 | 有效期截止 | 剩余天数 | |------|---------|------|-----------|---------| | #1 | 服务器证书 | CN=baidu.com | 2026-08-10 | 188天 | | #2 | 中间证书 | GlobalSign RSA OV SSL CA 2018 | 2028-11-21 | 1021天 | | #3 | 中间证书 | GlobalSign Root CA - R3 | 2028-01-28 | 724天 | 可以看到,证书链中的 **中间证书** 最晚将在 **2028 年**到期。这正是我们担心的焦点。 ## 三、证书验证流程 当客户端(如 `curl`)访问 `www.baidu.com` 时,SSL/TLS 握手和证书验证的完整流程如下: ```mermaid sequenceDiagram participant C as 客户端<br/>(curl) participant S as 服务器<br/>(www.baidu.com) participant T as 系统信任库<br/>(/etc/ssl/cert.pem) Note over C,S: TLS握手开始 C->>S: 1. ClientHello(支持的加密套件) S->>C: 2. ServerHello + 证书链<br/>(3个证书:服务器+2个中间证书) Note over C: 证书链验证开始 C->>C: 3. 验证证书#1签名<br/>(使用证书#2的公钥) C->>C: 4. 验证证书#2签名<br/>(使用证书#3的公钥) C->>T: 5. 查找根证书<br/>(查询:GlobalSign Root CA - R3) T-->>C: 6. 返回匹配的根证书<br/>(有效期至2029-03-18) C->>C: 7. 验证证书#3签名<br/>(使用根证书公钥) Note over C: ✅ 信任链验证通过 C->>S: 8. 建立加密连接 ``` ### 核心验证步骤 1. **证书链完整性验证**:逐级验证每个证书的数字签名,确保证书由上级 CA 合法签发 2. **信任锚点查找**:在系统信任库(如 `/etc/ssl/cert.pem`)中查找根证书 3. **有效期检查**:确认当前时间在所有证书的有效期内 ### 验证结果 通过 `sitecertcheck` 检查,当前验证结果为: - ✅ **证书链验证**:通过 - ✅ **系统信任**:匹配根证书 #97(GlobalSign Root CA - R3) - ✅ **根证书有效期**:2029-03-18(剩余 1139 天) ## 四、为什么不用担心 2028 年到期? ### 4.1 系统信任库中的 GlobalSign 根证书 通过 `sitecertcheck listca` 命令查看系统信任库,发现系统中预置了 **多个 GlobalSign 根证书**,有效期各不相同: | 序号 | 根证书 | 有效期截止 | 剩余天数 | |------|--------|-----------|---------| | #34/#35 | GlobalSign | 2038-01-19 | 4367天 | | #64 | GlobalSign | 2034-12-10 | 3231天 | | #97 | GlobalSign Root CA - R3 | 2029-03-18 | 1139天 | | #101 | GlobalSign Root CA | 2028-01-28 | 724天 | 关键发现:系统中有 GlobalSign 根证书的有效期可达 **2038 年**,远远超过当前中间证书的到期时间。 ### 4.2 证书续签机制 当中间证书在 2028 年到期时,会发生什么? ```mermaid graph LR subgraph "2026年 当前状态" A[baidu.com服务器证书<br/>有效期至2026-08] end subgraph "2028年 证书续签" B[中间证书即将到期<br/>2028-01 & 2028-11] C[续签新证书] end subgraph "系统信任库(持续更新)" D1[GlobalSign Root CA - R3<br/>有效期至2029年] D2[GlobalSign Root CA<br/>有效期至2038年] D3[其他GlobalSign根证书<br/>有效期至2038年] end A -->|2026年前续签| C C -->|可选择签发| D1 C -->|可选择签发| D2 C -->|可选择签发| D3 style A fill:#ffebee style B fill:#fff9c4 style C fill:#e1f5fe style D1 fill:#e8f5e9 style D2 fill:#e8f5e9 style D3 fill:#e8f5e9 Note1[💡 关键点:<br/>系统信任库中有多个<br/>GlobalSign根证书可用] style Note1 fill:#f3e5f5 ``` #### 证书续签的完整流程 1. **提前续签**:网站运营者会在证书到期前(通常提前几个月)向 CA(GlobalSign)申请续签新证书 2. **更换信任链**:新签发的证书可以选择指向有效期更长的根证书(如有效期至 2038 年的 GlobalSign 根证书) 3. **无缝切换**:客户端系统中已经预置了有效期至 2038 年的 GlobalSign 根证书,新证书链会自动被系统信任 4. **向下兼容**:`curl` 等客户端工具会自动使用新的证书链进行验证,无需任何配置更改 ### 4.3 为什么客户端不受影响? 关键在于: - **根证书预置**:操作系统和浏览器在出厂时就预置了主流 CA 的根证书 - **根证书长期有效**:根证书的有效期通常为 20-30 年,远超中间证书和服务器证书 - **透明更新**:当服务器更新证书时,客户端自动使用新的证书链,整个过程对用户透明 - **多根证书冗余**:同一个 CA(如 GlobalSign)会维护多个根证书,确保平滑过渡 ## 五、结论 ✅ **无须担心**:证书到期问题可以通过续签机制妥善解决 ### 核心要点 1. **证书链是分层的**:服务器证书 → 中间证书 → 根证书 2. **根证书预置在系统中**:客户端系统信任库中预置了多个有效期长的根证书 3. **证书到期前可续签**:网站运营者会在证书到期前续签,并可选择指向有效期更长的根证书 4. **客户端自动适配**:只要系统信任库保持更新,证书验证就能持续有效,无需用户干预 ### 最终答案 **到了 2028 年,curl 调用是否依然有效?** 是的,**依然有效**。因为: - 网站会在 2028 年前续签新证书 - 新证书会指向有效期至 2038 年的根证书 - 客户端系统中已经有该根证书,自动信任新证书链 - 整个过程对 `curl` 等客户端完全透明 --- ## 附录 ### 附录 A:sitecertcheck 完整输出(证书链检查) 以下是使用 `sitecertcheck www.baidu.com` 命令的完整输出: ``` (base) jacky@JackydeMac-Pro:/tmp$ sitecertcheck www.baidu.com [INFO] 正在测试 2 个系统CA证书路径... [INFO] 测试路径: /etc/ssl/cert.pem [SUCCESS] ✓ 找到可用的CA证书文件: /etc/ssl/cert.pem 正在测试系统 CA 证书路径... 测试了 1 个路径,找到 1 个可用 ✓ /etc/ssl/cert.pem [SUCCESS] 测试完成 [INFO] 正在检查 www.baidu.com:443 的SSL证书... 正在检查 www.baidu.com:443 的SSL证书... 证书链中共有 3 个证书 序号 类型 起始时间 结束时间 剩余天数 状态 ------------------------------------------------------------------------------------------------------ 1 服务器证书 2025-07-09 07:01:02 2026-08-10 07:01:01 188 有效 ====================================================================================================== 主题: CN=baidu.com O=Beijing Baidu Netcom Science Technology Co., Ltd L=beijing ST=beijing C=CN 颁发者: CN=GlobalSign RSA OV SSL CA 2018 O=GlobalSign nv-sa C=BE 序列号: 27025959261604984493724308777 签名算法: SHA256-RSA 公钥: RSA 2048 位 ====================================================================================================== 2 中间证书 2018-11-21 00:00:00 2028-11-21 00:00:00 1021 有效 ====================================================================================================== 主题: CN=GlobalSign RSA OV SSL CA 2018 O=GlobalSign nv-sa C=BE 颁发者: CN=GlobalSign OU=GlobalSign Root CA - R3 O=GlobalSign 序列号: 153000603918210013455007253847 签名算法: SHA256-RSA 公钥: RSA 2048 位 ====================================================================================================== 3 中间证书 2018-09-19 00:00:00 2028-01-28 12:00:00 724 有效 ====================================================================================================== 主题: CN=GlobalSign OU=GlobalSign Root CA - R3 O=GlobalSign 颁发者: CN=GlobalSign Root CA OU=Root CA O=GlobalSign nv-sa C=BE 序列号: 153000549611226544087872427626 签名算法: SHA256-RSA 公钥: RSA 2048 位 ====================================================================================================== 验证摘要: -------------------------------------------------- 证书链验证: ✓ 通过 系统信任: ✓ 受信任 匹配的系统根证书: #[97] (listca) 主题: CN=GlobalSign, OU=GlobalSign Root CA - R3, O=GlobalSign 颁发者: CN=GlobalSign, OU=GlobalSign Root CA - R3, O=GlobalSign 过期时间: 2029-03-18 10:00:00 剩余天数: 1139 位置: /etc/ssl/cert.pem -------------------------------------------------- [SUCCESS] 检查完成 证书 #1: 主题: CN=baidu.com, O=Beijing Baidu Netcom Science Technology Co., Ltd, L=beijing, ST=beijing, C=CN 颁发者: CN=GlobalSign RSA OV SSL CA 2018, O=GlobalSign nv-sa, C=BE 有效期: 起始时间: 2025-07-09 07:01:02 结束时间: 2026-08-10 07:01:01 证书 #2: 主题: CN=GlobalSign RSA OV SSL CA 2018, O=GlobalSign nv-sa, C=BE 颁发者: CN=GlobalSign, OU=GlobalSign Root CA - R3, O=GlobalSign 有效期: 起始时间: 2018-11-21 00:00:00 结束时间: 2028-11-21 00:00:00 证书 #3: 主题: CN=GlobalSign, OU=GlobalSign Root CA - R3, O=GlobalSign 颁发者: CN=GlobalSign Root CA, OU=Root CA, O=GlobalSign nv-sa, C=BE 有效期: 起始时间: 2018-09-19 00:00:00 结束时间: 2028-01-28 12:00:00 [SUCCESS] 共输出 3 个证书 ``` ### 附录 B:系统根证书列表(GlobalSign 相关) 以下是使用 `sitecertcheck listca | grep GlobalSign` 命令查看系统中 GlobalSign 相关根证书的输出: ```bash (base) jacky@JackydeMac-Pro:/tmp$ sitecertcheck listca | grep GlobalSign [INFO] 正在获取系统CA根证书... [INFO] 共找到 113 个系统CA证书 [SUCCESS] 共显示 103 个证书 34 GlobalSign GlobalSign 2012-11-13 00:00:00 2038-01-19 03:14:07 9198 4367 35 GlobalSign GlobalSign 2012-11-13 00:00:00 2038-01-19 03:14:07 9198 4367 64 GlobalSign GlobalSign 2014-12-10 00:00:00 2034-12-10 00:00:00 7305 3231 97 GlobalSign GlobalSign 2009-03-18 10:00:00 2029-03-18 10:00:00 7305 1139 101 GlobalSign Root CA GlobalSign Root CA 1998-09-01 12:00:00 2028-01-28 12:00:00 10741 724 ``` 从输出可以看到,系统中存在 **5 个 GlobalSign 根证书**,其中: - **#34 和 #35**:有效期至 **2038-01-19**,剩余 **4367 天**(约 12 年) - **#64**:有效期至 **2034-12-10**,剩余 **3231 天**(约 9 年) - **#97**:有效期至 **2029-03-18**,剩余 **1139 天**(约 3 年),**当前使用的根证书** - **#101**:有效期至 **2028-01-28**,剩余 **724 天**(约 2 年) 这些根证书为未来的证书续签提供了充足的选择空间。 最后修改:2026 年 02 月 03 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏