顾名思义,证书链是由一串数字证书链接而成,为了弄清楚这个概念,先看看什么是数字证书。

一、数字证书的基础知识

数字证书是用来认证公钥持有者身份合法性的电子文档,以防止第三方冒充行为。数字证书由 CA(Certifacate Authority) 负责签发,关键内容包括 颁发s者证书有效期使用者组织使用者公钥 等信息。数字证书涉及到一个名为 PKI(Public Key Infrastructure) 的规范体系,包含了数字证书格式定义、密钥生命周期管理、数字签名及验证等多项技术说明,不在这篇笔记中详细展开。

我们借助下面的流程,看看 CA 是如何签发一张证书,使用者又是如何验证这样证书的。这又涉及到了数字签名技术,数字签名技术又是基于公钥密码技术。

现实世界中,签名是针对承诺的一种表现形式,手手段可以通过手写签字或盖扣印章;而在数字世界中,签名仍然是为了表示承诺,只是手段变成了二进制。

好,我们来看看 CA 数字签名包括两个过程:签发证书(Signing)验证证书(Verification)

签发证书的过程

  1. 撰写证书元数据:包括 签发人(Issuer)地址签发时间有效期 等,还包括证书持有者(Owner)基本信息,比如 DN(DNS Name,即证书生效的域名)Owner 公钥 等信息
  2. 使用通用的 Hash 算法(如SHA-256)对证书元数据计算生成 数字摘要
  3. 使用 Issuer 的私钥对该数字摘要进行加密,生成一个加密的数字摘要,也就是Issuer的 数字签名
  4. 将数字签名附加到数字证书上,变成一个 签过名的数字证书
  5. 将签过名的数字证书与 Issuer 的公钥,一同发给证书使用者(注意,将公钥主动发给使用者是一个形象的说法,只是为了表达使用者最终获取到了 Issuer 的公钥)

验证证书的过程

  1. 证书使用者获通过某种途径(如浏览器访问)获取到该数字证书,解压后分别获得 证书元数据数字签名
  2. 使用同样的Hash算法计算证书元数据的 数字摘要
  3. 使用 Issuer 的公钥 对数字签名进行解密,得到 解密后的数字摘要
  4. 对比 2 和 3 两个步骤得到的数字摘要值,如果相同,则说明这个数字证书确实是被 Issuer 验证过合法证书,证书中的信息(最主要的是 Owner 的公钥)是可信的

上述是对数字证书的签名和验证过程,对普通数据的数字签名和验证也是利用了同样的方法。

我们再来总结一下“签发证书”与“验证证书”两个过程,Issuer(CA)使用 Issuer 的私钥 对签发的证书进行数字签名,证书使用者使用 Issuser 的公钥 对证书进行校验,如果校验通过,说明该证书可信。

由此看出,校验的关键是 Issuer 的公钥,使用者获取不到 Issuer 的私钥,只能获取到 Issuer 的公钥,如果 Issuer 是一个坏家伙,谁来证明 Issuer 的身份 是可信的?

这就涉及到一个信任链条了,也是这篇笔记本身要讲述的事情,证书链。

二、证书链是什么

还是以百度为例,在浏览器上访问 “www.baidu.com” 域名,地址连左侧有一个小锁的标志,点击就能查看百度的数字证书,如下图所示(使用的是Edge浏览器)

在图片的顶部,我们看到这样一个层次关系:

GlobalSign Root CA -> GlobalSign Organization Validation CA -> baidu.com

这个层次可以抽象为三个级别:

  1. end-user:即 baidu.com,该证书包含百度的公钥,访问者就是使用该公钥将数据加密后再传输给百度,即在 HTTPS 中使用的证书
  2. intermediates:即上文提到的 签发人 Issuer,用来认证公钥持有者身份的证书,负责确认 HTTPS 使用的 end-user 证书确实是来源于百度。这类 intermediates 证书可以有很多级,也就是说 签发人 Issuer 可能会有有很多级
  3. root:可以理解为 最高级别的签发人 Issuer,负责认证 intermediates 身份的合法性

这其实代表了一个信任链条,最终的目的就是为了保证 end-user 证书是可信的,该证书的公钥也就是可信的。

证书链

结合实际的使用场景对证书链进行一个归纳:

  1. 为了获取 end-user 的公钥,需要获取 end-user 的证书,因为公钥就保存在该证书中
  2. 为了证明获取到的 end-user 证书是可信的,就要看该证书是否被 intermediate 权威机构认证,等价于是否有权威机构的数字签名
  3. 有了权威机构的数字签名,而权威机构就是可信的吗?需要继续往上验证,即查看是否存在上一级权威认证机构的数字签名
  4. 信任链条的最终是Root CA,他采用自签名,对他的签名只能无条件的信任

证书链逐级认证

说到无条件信任,也不用奇怪,尤瓦尔赫拉里在《人类简史》中已经阐述过,基于虚构故事所建立的信任,最终将人类待到了今天。

还有一个小问题,Root 根证书从何而来呢?除了自行下载安装之外,浏览器、操作系统等都会内置一些 Root 根证书,称之为 Rrusted Root Certificates。比如 Apple MacOS 官网就记录了操作系统中内置的可信任根证书列表。

macOS High Sierra 中可用的受信任根证书列表


证书链的基本原理就是这些,有一篇E文专门讲述证书链可供学习参考,链接如下:What is the SSL Certificate Chain?

数字证书是一种普遍使用的身份认证方式,而另外一种认证方式,基于身份标识,也就是和PKI竞争的IBC(Identity-Based Cryptography)体系正在兴起,学习了解中,敬请期待。

作者:小叶与小茶
链接:https://www.jianshu.com/p/fcd0572c4765
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

关于证书链的一点认知相关推荐

  1. 关于数字证书链的一点认知

    顾名思义,证书链是由一串数字证书链接而成,为了弄清楚这个概念,先看看什么是数字证书. 一.数字证书的基础知识 数字证书是用来认证公钥持有者身份合法性的电子文档,以防止第三方冒充行为.数字证书由 CA( ...

  2. 语音交互设计的一点认知

    语音用户界面(或VUI)是一种交互模型,在该模型中,人与机器进行交互,并至少部分通过使用语音来执行一组任务. 实际上,这种方式的交互式语音应答(IVR)系统在银行业和旅游业中已经得到了广泛的应用.这些 ...

  3. 智能音箱来了,语音交互设计的一点认知

    语音用户界面(或VUI)是一种交互模型,在该模型中,人与机器进行交互,并至少部分通过使用语音来执行一组任务. 实际上,这种方式的交互式语音应答(IVR)系统在银行业和旅游业中已经得到了广泛的应用.这些 ...

  4. 我的内核学习笔记6:PCI驱动probe的一点认知

    对于PCI的学习,在文章<初识PCI>和<再识PCI:一个PCI驱动实例>中有介绍,文中使用大量代码进行演示.但总觉得有些认知不到位.于是就再写一文. 一.PCI驱动一般框架 ...

  5. 对P300的一点认知

    文献信息 P300与认知加工:方法.机制和应用 肖英霞   南京信息工程大学心理健康教育与研究中心 前段时间盲目修改了一个oddball范式,并采集了3个脑电ERP数据,在数据分析过程中发现自己对od ...

  6. 关于socket-error-10054的一点认知

    今天开发网络模型,又遇到了10054的错误,这是之前已经遇到过,但是一直没有处理,今天在网上查找方案,看到一篇帖子,觉得有点道理,拷贝下来,大家参详一二,希望大牛给出正确的解释.帖子是英文,大概意思我 ...

  7. 关于容器、K8s的一点认知

    文章目录 一.什么是容器 二.什么是容器镜像 三.什么是Volume 四.什么是k8s.Pod 五.k8s里的volume 六.k8s的控制器模式 七.k8s的网络原理 八.k8s的调度原理 一.什么 ...

  8. 关于标识密码的一点认知

    之前整理过几篇关于数字证书的笔记.数字证书技术的是 PKI(Public Key Infrastructure)的重要组成部分,基于数字证书技术的身份认证方式,在在金融.通信.互联网.数据中心等领域发 ...

  9. 对「喷群」的一点认知

    阅读本文大概需要2分钟 「喷群之火,可以燎原」.不知道这两天大家注意到了没有,微信.QQ.论坛等出现了各种喷群,通俗点理解就是对骂群,形形色色各种骂,各种互怼. 讲真,我也是一名吃瓜群众,正好今天周六 ...

最新文章

  1. java openjdk 卸载_java – 如何卸载OpenJDK?
  2. 【数据竞赛】Kaggle实战之特征工程篇-20大文本特征(下)
  3. 表空间迁移(transport tablespace)测试案例
  4. 【LeetCode】3月17日打卡-Day2
  5. appium 如何调用 adb_带你了解可用于Android APP自动化测试的框架:Appium
  6. 一步一步写算法(之排序二叉树插入)
  7. php 脚本会超时吗,PHP脚本执行超时的解决办法
  8. 声明类对象加括号与声明指针对象加括号的问题
  9. 2017华为笔试题3
  10. 关于反转的总结(C/C++)
  11. windows10 系统共享文件端口修改
  12. HDU 4508 湫湫系列故事――减肥记I 【完全背包】
  13. 照片透明背景抠图怎么做?试试这几种抠图方法
  14. docker存储bind mounts用法
  15. [Android答答答]Handler是什么?
  16. 一文读懂ZigBee无线通信技术
  17. 【JS里面使用var声明变量存在的三个问题】
  18. 华为伙伴暨开发者大会GaussDB,客户伙伴金融科技发展的经验之谈
  19. 戴尔latitude D630电脑U盘装win10图文详解
  20. KMP之GoodLuck!

热门文章

  1. python求向量函数的雅可比矩阵_[数学] 向量函数的雅可比矩阵与链式法则
  2. redirect使用
  3. 2023热销护眼灯品牌:大国品牌,爱德华医生护眼灯52年匠心之路
  4. 如何设置win10登录不需输入开机密码_?win10开机密码取消的方法
  5. 双11过了,继续打怪“升级”
  6. 基因调控分析之非编码RNA
  7. android拦截js弹窗,C++ 拦截 CEF 的JS 弹窗(Alert, Confirm),改造为C++的对话框
  8. 随身WiFi直插手机,将随身WiFi当网线用才能真正提升网速
  9. 7-8 阅览室 (20 分)
  10. Orchard常见问题