详解 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
相关推荐
永远不会出bug30 分钟前
JAVA:WebSocket 「在线状态 + 强制挤下线通知」
网络·websocket·网络协议
BING_Algorithm2 小时前
Java开发常用网络协议解析
后端·网络协议
半壶清水2 小时前
ubuntu中部署开源交换机模拟器bmv2详细步骤
linux·运维·网络·网络协议·tcp/ip·ubuntu
爱吖吖吖a2 小时前
CSMA/CA(载波侦听多路访问/冲突避免)
网络·网络协议
X7x52 小时前
ACL访问控制列表:网络安全的守护神
网络协议·网络安全·信息与通信·acl
(Charon)3 小时前
【C++/Qt】Qt 实现 TCP Client:从功能构思到消息收发与日志保存
qt·网络协议·tcp/ip
想成为优秀工程师的爸爸4 小时前
第二十四篇技术笔记:郭大侠学DoIP - 从“偶睡破庙”到“天字一号”
网络·笔记·网络协议·tcp/ip·信息与通信
夜瞬4 小时前
HTTP基础教程:请求方法、状态码、JSON、鉴权、超时、重试与流式返回
网络协议·http·json
水木流年追梦4 小时前
CodeTop Top 300 热门题目10-验证IP地址
python·网络协议·tcp/ip·算法·leetcode
lifewange7 小时前
RPC 是什么
网络·网络协议·rpc