← 返回题目列表

数字证书是什么?证书链是如何验证的?

高频 中等 第 6 / 29 题 更新于 2026/07/28
数字证书CA证书链HTTPS

简化版

数字证书是由权威机构 CA 签发的「身份证」,它把服务器的公钥域名绑定在一起,并由 CA 用自己的私钥签名。浏览器验证时,用内置的 CA 公钥验签,确认这个公钥确实属于这个域名。证书链是「网站证书 → 中间 CA → 根 CA」的信任链条,浏览器逐级验签直到某个内置信任的根证书,全链通过才信任。

详细版

证书里有什么:服务器域名、服务器公钥、颁发者(CA)、有效期,以及最关键的——CA 用私钥对以上内容的数字签名

为什么需要证书:非对称加密要用服务器公钥,但「怎么确认这个公钥真属于目标网站、不是中间人伪造的」是个问题。证书就是由可信第三方(CA)为「公钥属于某域名」这件事背书

证书链验证过程

  1. 服务器发来自己的证书(叶子证书)+ 中间证书;
  2. 浏览器取中间 CA 的公钥验证叶子证书的签名;
  3. 再取根 CA 的公钥验证中间证书的签名;
  4. 根证书是浏览器/操作系统预置的、天然信任的;
  5. 一路验签到受信任的根证书,且域名匹配、未过期、未吊销,才判定证书可信。

完整版教学

一、证书要解决的核心问题:公钥可信

HTTPS 加密要用服务器的公钥。但公钥是在网络上传过来的,有个致命疑问:你怎么知道拿到的公钥真是目标网站的? 万一中间人把自己的公钥冒充成网站的发给你,你用它加密,中间人就能解密一切。

数字证书就是为了解决**「公钥归属」的可信问题**:它不是加密手段,而是一种身份背书——由一个大家都信任的第三方(CA)出面证明「这个公钥确实属于这个域名」。就像身份证由公安局背书证明「这张脸对应这个人」。

二、CA 怎么背书:用签名

CA 背书的手段是数字签名

  • 网站向 CA 申请证书时,CA 核验网站对域名的所有权;
  • CA 把「域名 + 网站公钥 + 有效期」等信息用CA 自己的私钥签名,打包成证书;
  • 浏览器收到证书后,用CA 的公钥验证这个签名。签名验证通过,就说明这份证书确实是该 CA 签发的、内容没被篡改。

中间人想伪造证书,就得伪造 CA 的签名——但它没有 CA 的私钥,签不出来。所以伪造的证书会验签失败,冒充被识破(详见「数字签名」那道题)。

三、证书链:信任是怎么一级级传递的

问题又来了:验证网站证书要用 CA 的公钥,那 CA 的公钥又怎么可信? 答案是证书链——信任逐级向上传递:

网站证书(叶子)  ← 由「中间 CA」签名
     ↑ 验签用中间 CA 的公钥
中间 CA 证书      ← 由「根 CA」签名
     ↑ 验签用根 CA 的公钥
根 CA 证书(根)  ← 自签名,且预置在操作系统/浏览器里,天然信任

浏览器从网站证书开始,一级级往上验签,直到遇到一个预置在本地信任库里的根证书。根证书是「信任的锚点」(trust anchor)——它不需要别人证明,因为它本来就在你系统里、由操作系统/浏览器厂商预先信任。整条链每一环都验签通过,才最终信任网站证书。

为什么要中间 CA 而不直接用根 CA 签?因为根 CA 的私钥极其重要,一旦泄露整个体系崩塌,所以根 CA 平时离线保管,用中间 CA 来日常签发,隔离风险。

四、验证不只看签名,还看这些

证书验签通过还不够,浏览器还会检查:

  • 域名匹配:证书里的域名是否和你访问的域名一致(防止拿 a.com 的合法证书冒充 b.com);
  • 有效期:是否在有效期内(过期会警告);
  • 吊销状态:证书是否被吊销(通过 CRL 或 OCSP 查询,OCSP Stapling 可优化);
  • 信任链完整:能否一路链到受信任的根。

任何一项不过,浏览器就显示「你的连接不是私密连接」的警告。

五、自签名证书为什么会被警告

你可以自己给自己签一张证书(自签名),但浏览器会报不安全警告。因为自签名证书没有经过受信任 CA 的背书——它自己证明自己,就像自己给自己发身份证,没有公信力。浏览器无法把它链到任何受信任的根证书,所以不信任。内网测试可以手动导入信任,但公网必须用受信 CA 签发的证书(如 Let’s Encrypt 免费证书)。

六、常见误区

  • ❌ 以为证书是用来加密的——证书是身份背书(证明公钥归属),加密由密钥交换和对称加密完成。
  • ❌ 以为浏览器直接信任网站证书——要沿证书链一级级验签到预置的根证书。
  • ❌ 以为有证书就绝对安全——CA 被攻破、错误签发、或用户手动信任了恶意根证书,仍可能被冒充。
  • ❌ 以为自签名证书不安全是因为加密弱——加密一样强,问题是没有可信第三方背书、无法链到受信根。

六、常见误区与追问

考点正确口径
证书内容域名、公钥、主体、有效期、签发者、签名
证书链服务器证书到中间 CA 再到根 CA
验证重点签名、域名、有效期、用途、吊销状态
server cert --signed by--> intermediate CA
intermediate CA --signed by--> root CA
root CA trusted by OS/browser

证书解决的不是“加密算法强不强”,而是“这个公钥到底是不是目标网站的”。

  • 误区:证书里保存服务器私钥。 证书里是公钥和身份信息,私钥必须只由服务器自己保存。
  • 误区:浏览器只要能解开签名就信任证书。 还要校验证书链、域名匹配、有效期、用途和吊销状态等。
  • 误区:自签名证书一定不能加密。 自签名也能加密传输,但浏览器不默认信任其身份背书。
  • 追问:根 CA 为什么可信? 根证书预置在操作系统或浏览器信任库中,是信任链的锚点。
  • 追问:中间 CA 有什么作用? 降低根 CA 直接签发风险,便于分级管理和吊销。
  • 追问:域名不匹配会怎样? 浏览器会警告或阻止,因为证书不能证明当前访问域名的身份。

七、加强记忆

数字证书是 CA 用私钥签名、把「域名 + 服务器公钥」绑定的身份凭证,解决「公钥是否真属于该域名」的可信问题。浏览器用证书链逐级验签——网站证书 → 中间 CA → 根 CA(预置信任的锚点),并检查域名、有效期、吊销状态,全通过才信任。中间人没有 CA 私钥,伪造不出被信任的证书,冒充因此被挡住。