详解 HTTPS之 TLS 证书信任链

相信大家在学习计算机网络的过程中都会接触到 HTTP 和 HTTPS,TLS四次握手的环节也被频繁地提及。但大部分文章对第三次握手:客户端验证服务器提供的证书并提取公钥只是一笔带过,但实际上验证服务器证书是否合法也是很复杂的,其中就要经过 TLS 版本链的验证。这篇文章就要详细解析这个问题。

数字证书与CA

CA = Certificate Authority,证书颁发机构

它是受信任的第三方机构,负责:

  • 验证网站 / 机构 / 个人的真实身份
  • 用自己的私钥签发数字证书
  • 维护证书的合法性、有效期、吊销状态

数字证书 = 身份证(网络世界的)

一份标准证书里主要包含:

  • 持有者公钥
  • 持有者域名 / 组织 / 个人信息
  • 有效期
  • 签发它的 CA 信息
  • CA 用私钥做的数字签名(保证没被篡改)

一句话:数字证书 = 公钥 + 身份信息 + CA 的签名

证书链

信任链是根证书 → 中间证书 → 终端证书的层级结构,每一层都由上一层用私钥签名,形成可追溯的信任传递。

层级 名称 角色与作用 存储位置 签发方式
顶端 根证书(Root CA) 信任锚点,整个体系的权威起点;私钥离线、严格保密 操作系统 / 浏览器内置信任库(如 Windows "受信任的根证书颁发机构") 自签名(自己签发自己)
中间 中间证书(Intermediate CA) 根 CA 的授权代理,用于签发终端证书;隔离根 CA 私钥,降低泄露风险 服务器需随终端证书一起发送给客户端 根证书私钥签名签发
底端 终端证书(End-Entity/Server Cert) 直接绑定域名 / 服务器,用于 TLS 握手的身份认证与密钥交换 部署在 Web 服务器(Nginx/Apache 等) 中间证书私钥签名签发

流程

  • 获取证书链 :服务器在 TLS 握手时,返回终端证书 + 所有中间证书(必须完整,否则客户端无法构建到根的路径)。
  • 逐级验证签名
    • 中间证书公钥 验证终端证书的签名 → 确认终端证书由该中间 CA 合法签发。
    • 根证书公钥 (来自本地信任库)验证中间证书的签名 → 确认中间 CA 由受信任根 CA 授权。
  • 信任锚定 :验证追溯到本地预装的根证书 → 信任链成立。
  • 附加有效性检查
    • 证书未过期(检查 Not Before/Not After)。
    • 域名匹配(CN/SAN 与访问域名一致)。
    • 未被吊销(查询 CRL/OCSP)。
    • 签名算法安全(如禁用 SHA-1)。
  • 结果:全部通过 → 连接安全(浏览器显示锁);任一失败则报错

额外疑问

为什么会提示 "证书不受信任"?

  • 证书是自签名
  • 证书由不知名 / 未预装的 CA 签发
  • 证书链不完整(缺中间证书)

自签名证书和 CA 证书区别?

  • 自签名:自己签自己,浏览器不认
  • CA 证书 :由权威机构签发,系统 / 浏览器内置信任

CA 为什么安全?

  • 根 CA 私钥离线保存、极度安全
  • 中间 CA 用来实际签发,隔离风险
  • 浏览器 / OS 只信任极少数根 CA
相关推荐
IT大白鼠26 分钟前
BGP多归属技术原理与应用实践
网络·网络协议·华为
忧云1 小时前
HTTP抓包工具:安装配置与使用教程
网络协议·网络抓包工具·http抓包
00后程序员张1 小时前
Jenkins 自动上传 IPA 到 App Store 把发布步骤融入 CI/CD
android·ios·小程序·https·uni-app·iphone·webview
Mr -老鬼2 小时前
EasyClick 入门指南:HTTP 网络请求与 API 对接实战
网络·网络协议·http·自动化·#easyclick
Shacoray2 小时前
K8s 中 Ingress 的 HTTPS 证书 如何生成?
容器·https·kubernetes
上海云盾第一敬业销售2 小时前
WAF架构解析与实战经验分享
网络协议·web安全·架构
行走__Wz3 小时前
【网工入门-01】模拟器工具eNSP
网络·网络协议
用户337922545683 小时前
A2A 协议规范深度剖析:三层架构、数据模型、操作语义与协议绑定
网络协议
曲幽3 小时前
写爬虫时用了代理还被封?Python 代理的那些隐藏坑,我替你踩明白了
python·http·https·proxy·socks·requests·socks5·proxies
liuzhilongDBA4 小时前
浅析连接池和TCP探活
网络·网络协议·tcp/ip