先回答这些问题:

  • 证书是什么?
  • 证书解决能解决什么问题?
  • 证书和CA机构的关系?

数字证书

数字证书的定义:
公开密钥认证(英语:Public key certificate),又称数字证书(digital certificate)或身份证书(identity certificate),就类似人的身份证

它用于公开密钥基础建设的电子文件,用来证明公开密钥拥有者的身份。 此文件包含了公钥信息、拥有者身份信息(主体)、以及数字证书认证机构(发行者)对这份文件的数字签名,以保证这个文件的整体内容正确无误。

简而言之,认证机构用自己的私钥对需要认证的人(或组织机构)的公钥施加数字签名并生成证书,即证书的本质就是对公钥施加数字签名。

证书格式

证书有不同格式类似,不同格式记录的信息,记录的格式有所不一样,下面举例X.509格式:
X.509 标准规定了证书可以包含什么信息,并说明了记录信息的方法(数据格式)。除了签名外,所有 X.509 证书都包含以下数据:
image

证书具体的样子:
image


证书的工作流程

image

要了解证书的工作流程,需要先了解一下CA机构的作用,以及一些配套密码算法,HASH、非对称加密、数字签名,因为证书是CA机构生成的,只有CA机构生成的证书,才能验证身份。


PKI的引入

CA机构+证书+用户 这一套整管理流程和认证服务的结合,这就是PKI公钥基础设施(PKI —— Public Key Infrastructure)。

PKI 的核心功能是:解决了谁是谁的鉴权问题,它提供网络上的身份证发行身份证验证服务。
他发的身份证就是数字证书,他提供的身份验证服务就是签名、验签机制。

PKI 的鉴权是通过建立了一个信任链,去解决在不安全的网络环境中如何确认验证身份的问题,PKI也是现代网络安全的基础。

PKI是如何实现身份认证的?

  • 怎么防止身份冒充:防止攻击者假冒合法实体?
  • 怎么防止中间人攻击:确保通信双方直接相连,没有恶意中介?
  • 怎么做到不可否认性:证明某个操作确实是由特定实体执行的?

为了解决这些问题,PKI都做了些什么?

需要了解一下构成PKI的一些要素:

  • CA (Certificate Authority,证书授权机构,就类似公安部门,可以查询验证人的身份证)
  • 申请人(被验证身份方)
  • 用户 (对于用户来说,证书和CA都是透明无感的,因为系统自动帮忙用户去做校验了。)

PKI所涉及的技术:

  • 非对称加密
  • Hash
  • 数字签名

CA提供的服务

  • CSR(Certificate Signing Request,证书签名请求)
    是由申请人生成的包含其公钥身份信息等内容的文件。它被发送给 CA,用于申请数字证书。CA 会根据 CSR 中的信息来创建数字证书,并使用自己的私钥对证书进行签名。

    image

  • 证书格式
    PKI 中常用的证书格式有 X.509 等,这由 申请人(被验证身份方) 在申请的时候选择一个证书格式。X.509 证书包含了证书版本、序列号、签名算法标识、颁发者名称、有效期、主体名称、主体公钥信息等多个字段,以一种标准化的方式来存储和传输证书信息,确保不同的系统和应用能够正确地解析和验证证书。

  • 预制证书
    通常是指在某些特定场景下,提前生成并颁发好的数字证书。例如,一些设备制造商可能会在设备出厂前就为设备预装证书,以便设备在接入网络时能够快速进行身份认证和安全通信。这些预制证书一般是由设备制造商或相关的 CA 按照一定的规则和流程进行生成和颁发的。
    预制证书就是帮CA做了一半工作的证书,只是还没有加签名而已。

  • 证书创建
    CA 根据申请人提交的 CSR 或 预制证书等信息,按照一定的规则和算法,将申请人的身份信息与公钥进行绑定,并使用自己的私钥对证书进行签名,从而创建出数字证书。(如下图)
    image

    image

  • 证书发布
    CA 将创建好的证书发送给申请人,或者将证书发布到证书库等公开的存储位置,以便用户或设备能够获取到证书并进行使用。

  • 证书作废(Certificate Revocation List,证书吊销列表):
    当出现证书不再有效或需要撤销的情况时,如用户身份信息变更、私钥泄露等,CA 会将证书标记为作废状态,并通过发布证书吊销列表(CRL)或在线证书状态协议(OCSP)等方式,让其他实体能够查询到证书的作废信息,从而不再信任该证书。


证书的工作流程(细讲)

对CA提供的服务有了解之后,现在可以来谈谈证书的工作流程了。

在公钥基础设施(PKI)中,Bob(服务提供者)、Alice(用户)和CA(证书颁发机构)的角色及证书工作流程如下:
image


  1. 角色定义
  • Bob:需要向外界证明身份的服务提供者(如网站服务器),持有由CA签发的数字证书。
  • Alice:需要验证Bob身份的用户(如客户端)。
  • CA:受信任的第三方机构,负责审核Bob身份并签发数字证书。

  1. 证书工作流程

    步骤1:Bob生成密钥对

    • Bob生成自己的公私钥对(公钥公开,私钥严格保密)。

    步骤2:Bob向CA申请证书

    • Bob将公钥、身份信息(如域名、组织信息)提交给CA,请求证书。

    步骤3:CA验证Bob身份

    • CA通过线下验证(如域名所有权、企业注册信息)确认Bob的身份真实性。

    步骤4:CA签发证书

    • CA将Bob的公钥、身份信息、有效期、颁发者信息等打包,使用CA的私钥生成数字签名,形成证书。
    • 证书格式通常为X.509,包含以下关键信息:
      • Bob的公钥
      • Bob的身份信息
      • 证书有效期
      • CA的名称
      • 数字签名(由CA私钥加密的哈希值)。

    步骤5:Bob使用证书

    • Bob将证书部署到服务器,在与Alice通信时(如建立HTTPS连接)发送该证书。

  1. Alice如何验证证书?
    当Alice收到Bob的证书后,需完成以下验证:

    步骤1. 检查证书基本信息

    • 有效期:确保证书未过期。
    • 域名匹配:证书中的域名是否与Bob的实际域名一致(如访问example.com时证书是否包含该域名)。

    步骤2. 验证证书颁发者(CA)的信任链

    • Alice的设备(如浏览器/操作系统)内置了受信任的根CA证书列表。
    • 检查Bob的证书是否由其中某个CA直接签发,或通过中间CA(Intermediate CA)签发。若存在中间CA,需验证整个证书链的签名有效性。

    步骤3. 验证数字签名

    1. 提取CA的公钥:从CA的证书(或信任链中的上级证书)中获取公钥。
    2. 解密签名:用CA的公钥解密证书中的数字签名,得到原始哈希值(Hash1)。
    3. 重新计算哈希:对证书中Bob的公钥、身份信息等明文内容计算哈希值(Hash2)。
    4. 对比哈希值:若Hash1 = Hash2,则证明证书未被篡改,且确实由CA签发。

    步骤4. 检查证书吊销状态(可选但重要)

    • 通过以下方式确认证书未被CA吊销:
      • CRL(证书吊销列表):下载CA发布的吊销列表,检查证书是否在其中。
      • OCSP(在线证书状态协议):实时向CA查询证书状态。

  1. 最终信任建立
  • 若所有验证通过,Alice确认:
    1. 证书中的公钥确实属于Bob。
    2. Bob的身份经过CA严格验证。
    3. 通信内容可通过Bob的公钥加密(或验证其签名),确保安全通信。

Alice无需直接信任Bob,而是通过信任CA间接建立对Bob的信任,这是PKI的核心思想。


证书链

浏览器上访问一个网站,然后查看一下对方站点的证书,会发现有证书链(证书层次结构) 信息,上面的流程也讲到了证书链,那么这个证书链是干嘛的?怎么运作的呢?

(可以使用证书在线解析工具查看:https://myssl.com/cert_decode.html
image

image
一般是三阶结构,或多阶结构(如果存在多个中间证书交叉链,会导致SSL证书文件变大,加载速度变慢)。

image

证书链:
证书链就是一个信任体系,是一个循环验证的过程,比如我收到你csdn的证书,你说你是GeoTrust机构认证过的,那我接着怀疑GeoTrust机构的证书有没有问题?GeoTrust机构说我是通过 DigCert机构 认证过的,那我接着问 DigCert机构 的证书就没有问题?

DigCert机构已经在系统初始化的时候就预制了一个根证书在系统证书库了,基本上PKI的流程只能信任到这里了。

你在问,系统预制的证书就牛逼了?就安全了?确实没办法保证哈,毕竟已经出现过预制的证书也会有问题的案例,但是基于成本问题,基本到这里就打住了。

如果无限追溯“谁认证了CA的根证书”,会导致逻辑死循环。因此,PKI的设计必须预设一个信任锚点(Trust Anchor),这是整个体系的基础。用现实世界类比:就像我们默认信任政府签发的身份证,而不需要追溯“谁认证了政府”一样。


验证机制:
当你在浏览器中访问一个网站(例如 *.csdn.net)并查看其证书层次结构时,浏览器会通过以下步骤验证证书链的完整性和合法性。以下以你提供的证书链为例,具体说明浏览器的验证过程:

证书层次结构示例

  • 根证书:DigiCert Global Root CA
    • 中间证书:GeoTrust CN RSA CA G1
      • 叶证书(终端实体证书):*.csdn.net

浏览器的验证流程:

  1. 接收服务器发送的证书链
  • 当访问 *.csdn.net 时,服务器会发送自己的证书(*.csdn.net)以及中间证书(GeoTrust CN RSA CA G1),但不会发送根证书(DigiCert Global Root CA)。
  • 根证书通常预置在浏览器或操作系统的受信任根证书存储中

  1. 构建证书链
    浏览器需要验证从叶证书到根证书的完整信任链:
  • 根证书(DigiCert Global Root CA)是浏览器本地预置的受信任根证书

    • 中间证书(GeoTrust CN RSA CA G1)的颁发者是 DigiCert Global Root CA
      • 叶证书(*.csdn.net)的颁发者是 GeoTrust CN RSA CA G1

    构建证书链流程图:
    image


  1. 逐级验证签名
    浏览器会从叶证书开始,逐级向上验证每一级证书的签名:
    3.1. 验证叶证书(*.csdn.net)的签名:

    • 使用中间证书 GeoTrust CN RSA CA G1 的公钥,解密叶证书的数字签名,得到哈希值(Hash1)。
    • 重新计算叶证书明文内容(公钥、域名、有效期等)的哈希值(Hash2)。
    • 如果 Hash1 = Hash2,则叶证书未被篡改,且由 GeoTrust CN RSA CA G1 签发。

    3.2. 验证中间证书(GeoTrust CN RSA CA G1)的签名:

    • 找到根证书 DigiCert Global Root CA(从本地受信任根证书库中提取)。
    • 使用根证书的公钥,解密中间证书的数字签名,得到哈希值(Hash3)。
    • 重新计算中间证书明文内容的哈希值(Hash4)。
    • 如果 Hash3 = Hash4,则中间证书未被篡改,且由 DigiCert Global Root CA 签发。

    验证证书链流程图:
    image


  1. 验证证书有效性
    每一级证书均需检查以下内容:
    • 有效期: 确保证书未过期(叶证书、中间证书、根证书均需有效)。
    • 用途匹配:
      • 叶证书的用途必须包含 Server Authentication(服务器身份验证)。
      • 中间证书的用途必须包含 Certificate Authority(证书颁发机构)。
    • 域名匹配: 叶证书中的 *.csdn.net 是否覆盖用户访问的域名(如 www.csdn.net)。

  1. 检查根证书的信任状态
  • 根证书 DigiCert Global Root CA 是否在浏览器的受信任根证书列表中?
    • 是:信任链成立。
    • 否:浏览器会提示证书不受信任(例如显示红色警告)。

  1. 检查证书吊销状态(可选但推荐)
    浏览器可能通过以下方式检查证书是否被吊销:
    6.1. OCSP(在线证书状态协议):

    • 向证书中指定的 OCSP 服务器(由 CA 提供)发送查询请求,确认叶证书和中间证书未被吊销。

    6.2. CRL(证书吊销列表):

    • 下载 CA 发布的吊销列表,检查证书是否在其中。

关键验证点总结

  1. 信任链完整性:叶证书 → 中间证书 → 根证书必须完整且可追溯。
  2. 签名合法性:每一级证书的签名必须由其上级证书的公钥验证通过。
  3. 有效期和用途:所有证书必须有效且用途匹配。
  4. 根证书预置:根证书必须被浏览器或操作系统信任。

用户可见的结果

  • 如果所有验证通过:
    • 浏览器地址栏显示锁形图标,点击可查看证书详情。
    • 用户与网站建立加密连接(如 HTTPS)。
  • 如果验证失败:
    • 浏览器显示警告(如 此连接不是私密连接),阻止用户继续访问。

技术细节补充

  • 中间证书的必要性:
    • 根证书通常离线保存,不直接签发终端证书。中间证书用于日常签发,降低根证书泄露风险。
  • 证书链传递:
    • 服务器需在 TLS 握手时发送叶证书和中间证书,否则浏览器可能无法构建完整链(导致警告)。
  • 预置根证书的管理:
    • 浏览器和操作系统定期更新受信任的根证书列表(例如通过系统更新)。

通过以上流程,浏览器确保 *.csdn.net 的证书是由可信的 CA(DigiCert)签发的,且证书链未被篡改,拿出公钥进行加密使用,最终建立用户对网站身份的信任。


证书运营机构(CA)

  • DigiCert
  • Global Sign
  • Encrypt
  • Let's Encrypt (免费)

总结

证书就类似是一张实体身份证,这个身份证不光只存身份信息,还存这个实体相关的公钥。并且还对公钥和身份信息做了数字签名。

谁为这个公钥和身份信息做签名?
答:CA,CA就像现实的派出所、它对公钥和信息做了签名,就等于发了身份证(数字证书),它还负责帮助其他人去校验这个身份证(证书)是不是属于某个实体。


Reference

《图解密码学技术》

数字证书常见格式整理
https://blog.csdn.net/zhulianhai0927/article/details/106452521

posted on 2024-12-09 16:18  Mysticbinary  阅读(286)  评论(0)    收藏  举报