数字证书~证书链

来源:客户端认证https服务端证书过程详解——证书链_huzhenv5的博客-CSDN博客_证书链认证过程

基本概念

证书

首先,我们看看在wikipedia上对证书的定义,In cryptography, a public key certificate (also known as a digital certificate or identity certificate) is an electronic document used to prove ownership of a public key.。可以这么说,证书是用来认证公钥持有者的身份的电子文档,防止第三方进行冒充。一个证书中包含了公钥、持有者信息、证明证书内容有效的签名以及证书有效期,还有一些其他额外信息。

比如一个证书详细信息的截图:

CA

我们用证书来认证公钥持有者的身份,那证书是怎么来的呢?又该怎么认证证书呢?这涉及到一个称之为PKI(Public key certificate)的规范体系,包含了数字证书,公钥管理以及验证等技术,详细可以参考:https://en.wikipedia.org/wiki/Public_key_certificate ,我们这里只是简单介绍一下概念。在阮老师的文章中,提到证书要由证书中心(Certificate authority,简称CA)签发的,同样参考Wikipedia上的概念,In cryptography, a certificate authority or certification authority (CA) is an entity that issues digital certificates. (https://en.wikipedia.org/wiki/Certificate_authority) ,简单来说,CA就是签发电子证书的实体。

Signing & Verification

证书的签发(Signing)和认证(Verification)的过程:

 

这两个过程也是基于公钥与私钥的,签发和认证的过程跟传输信息过程中的加密解密过程非常类似。签名密文(Signature)是一个重要凭证,Signature与签发人的公钥一同传输,可以避免中间人在获取证书时对证书内容的篡改。参考:http://blog.torchz.net/security/2014/12/23/security-ca-chain-of-trust.html 。

签发证书的步骤:

  1. Signing阶段,首先撰写证书的元信息:签发人(Issuer)、地址、签发时间、过期失效等;当然,这些信息中还包含证书持有者(owner)的基本信息,例如owner的DN(DNS Name,即证书生效的域名),owner的公钥等基本信息。
  2. 通过Issuer(CA)的证书指定的Hash算法将信息摘要提取出来;
  3. Hash摘要通过Issuer(CA)私钥进行非对称加密,生成一个签名密文;
  4. 将签名密文attach到文件证书上,使之变成一个签名过的证书。

验证证书的步骤:

  1. Verification阶段,浏览器获得之前签发的证书;
  2. 将其解压后分别获得“元数据”和“签名密文”;
  3. 将Issuer(CA)的证书指定的Hash算法应用到“元数据”获取摘要A;
  4. 将"签名密文"通过Issuer(CA)的公钥解密获得摘要B。
  5. 比对摘要A和摘要B,如果匹配,则说明这个证书是被CA验证过合法证书,里面的公钥等信息是可信的。

在Verification阶段,解密Signature获得摘要需要通过签发者(Issuer)的公钥,又该如何获得这个公钥,同时确保这个公钥是有效的呢?就是下面的证书链的内容

证书链

实例

在Chrome上任意打开一个支持HTTPS的网站,例如 https://www.baidu.com/ ,打开开发者工具,点开Security

点开证书路径,查看证书信息如下: 

 

我们继续探究baidu使用的HTTPS证书,除了HTTPS使用的 baidu.com 证书,向上还有两级证书,证书有3类:

  • end-user :baidu.com 包含用来加密传输数据的公钥的证书,是HTTPS中使用的证书
  • intermediates:CA用来认证公钥持有者身份的证书,即确认HTTPS使用的end-user证书是属于baidu.com的证书。这类intermediates证书甚至可以有很多级。
  • root:用来认证intermediates证书是合法证书的证书。

简单来说,end-user证书上面几级证书都是为了保证end-user证书未被篡改,保证是CA签发的合法证书,进而保证end-user证书中的公钥未被篡改。

CA组织

除了end-user之外,证书被分为root Certificates和intermediates Certificates。相应地,CA也分了两种类型:root CAs 和 intermediates CAs。首先,CA的组织结构是一个树结构,一个root CAs下面包含多个intermediates CAs,而intermediates又可以包含多个intermediates CAs。root CAs 和 intermediates CAs都可以颁发证书给用户,颁发的证书分别是root Certificates和intermediates Certificates,最终用户用来认证公钥的证书则被称为end-user Certificates。

end-user certificates & intermediates certificates

我们使用end-user certificates来确保加密传输数据的公钥(public key)不被篡改,而又如何确保end-user certificates的合法性呢?这个认证过程跟公钥的认证过程类似,首先获取颁布end-user certificates的CA的证书,然后验证end-user certificates的signature。一般来说,root CAs不会直接颁布end-user certificates的,而是授权给多个二级CA,而二级CA又可以授权给多个三级CA,这些中间的CA就是intermediates CAs,它们才会颁布end-user certificates。

但是intermediates certificates的可靠性又如何保证呢?这就是涉及到证书链,Certificate Chain ,链式向上验证证书,直到Root Certificates,如下图:

 

root certificates

那Root Certificates又是如何来的呢?根据 https://support.dnsimple.com/articles/what-is-ssl-certificate-chain/ 这篇文章的说法,除了可以下载安装之外,device(例如浏览器,操作系统)都会内置一些root certificates,称之为trusted root certificates,https://support.apple.com/en-us/HT202858 ,在Apple的官网上可以看到这个列表,有各个操作版本直接内置的Root Certificates。windows系统查看方式可以看这篇文章:windows查看系统证书

最后一个问题,为什么需要证书链这么麻烦的流程?Root CA为什么不直接颁发证书,而是要搞那么多中间层级呢?找了一下,godaddy官方给了一个答案,为了确保root certificates的绝对安全性。我们可以想想,如果根证书的私钥泄露了,所有使用该证书认证的设备都将变得不安全,影响太大,所以通过intermediates certificates给网站颁发证书,假如某个intermediates certificates的私钥泄露了,只会影响这一个intermediates certificates颁发的证书的信用,影响要小很多。https://sg.godaddy.com/en/help/what-is-an-intermediate-certificate-868 ,将根证书隔离地越严格越好。

 

其他

了解了这个证书体系之后,才明白为什么百度/google这种公司也需要向第三方购买签名证书了,自签root证书推广起来非常困难,这也导致目前的证书市场基本上被 Symantec(VeriSign/GeoTrust) / Comodo / GoDaddy 垄断。百度使用的是Versign,google使用的是GeoTrust。目前HTTPS的推广已经不可避免,也已经有一些公益组织开始提供免费、自动化、开放的证书签发服务,例如:Let’s Encrypt 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

修改Netbeas的注释结构

Eclipse修改注释的方法:  窗口-》首选项-》java-》代码样式-》代码模板-》注释-》方法-》确定,下面就可以修改了  Netbeans修改注释的方法:  工具->模板 打开 看见那一排列表没有 展开Java 选择Java类 点击 在编辑器中打开 …

c语言assign用法,object-c语言的nonatomic,assign,copy,retain的区别

nonatomic:非原子性访问,不加同步,多线程并发访问会提高性能。如果不加此属性,则默认是两个访问方法都为原子型事务访问。(atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一…

反反爬技术,破解猫眼网加密数字

From:https://blog.csdn.net/qq_31032181/article/details/79153578 From:http://www.freebuf.com/news/140965.html 利用自定义web-font实现数据防采集:http://blog.csdn.net/fdipzone/article/details/68166388 利用前端字体文件(.ttf)混…

数字签名,数字证书,证书链原理

来源:数字签名,数字证书,证书链原理(图文详解)_Ruby丶彬的博客-CSDN博客_证书链验证原理 数字签名,数字证书,加密简述 数字签名:谈及数字签名,就如小时候老师叫把卷子或…

成都信息工程c语言题库,成都信息工程学院C语言考试题及答案

}in 0;while (sum < im) { }sum - in; in--;printf(\sum%d\\n\in , sum); return 0;in; sum in;编写一程序P215.C实现以下功能求S1/1&#xff01;1/2&#xff01;1/3&#xff01;…1/N&#xff01;并输出结果(显示时小数部分占16位&#xff0c;计算时要求从第1项开始往后累…

转--javascript 数组

较为上篇更为深刻 原文&#xff1a;http://blog.csdn.net/jaylongli/archive/2009/03/20/4007823.aspx 数组有四种定义的方式 使用构造函数&#xff1a; vara newArray(); varb newArray(8); varc newArray("first", "second", "third"); 或者数…

猫眼 — 破解数字反爬获取实时票房

From&#xff1a;https://zhuanlan.zhihu.com/p/33112359 js分析 猫_眼_电_影 字体文件 font-face&#xff1a;https://www.cnblogs.com/my8100/p/js_maoyandianying.html 解析某电影和某招聘网站的web-font自定义字体&#xff1a;https://www.jianshu.com/p/5400bbc8b634 Fo…

c语言中单精度的有效位数是,C语言中的单精度双精度数的有效位数

#include "stdio.h"#include "conio.h"void main(){printf("%.20f\n",0.1234567890123456789f);getch();}观察在VC6&#xff0c;WinTC中的运行结果&#xff0c;可能是0.1234567891043281560000.12345678901234567700而一般在C语言教材上说&#…

Yoshua Bengio团队通过在网络「隐藏空间」中使用降噪器以提高深度神经网络的「鲁棒性」

原文来源&#xff1a;arXiv 作者&#xff1a;Alex Lamb、Jonathan Binas、Anirudh Goyal、Dmitriy Serdyuk、Sandeep Subramanian、Ioannis Mitliagkas、Yoshua Bengio「雷克世界」编译&#xff1a;嗯~是阿童木呀、KABUDA、EVA导语&#xff1a;深度神经网络在各种各样的重要任…

PDF签名系列(1):PDF签名机制的漏洞分析

来源&#xff1a;PDF签名系列(1):PDF签名机制的漏洞分析 - 知乎 研究PDF文件的签名机制有一段时间了&#xff0c;刚开始学习的时候就看到有提到说&#xff0c;被签名的PDF内容的Range gap&#xff0c;会成为这个机制的漏洞&#xff0c;但是一直不能完全参透。直到昨天看到一篇…

linux date命令显示毫秒,解决MacOS系统中date命令没有毫秒和sha512sum、sha256sum、md5sum等命令的问题...

安装brew/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"使用brew安装coreutilsbrew install coreutils设置系统新的命令软连接sudo ln -sv /usr/local/bin/gsha256sum /usr/local/bin/sha256sumsudo ln -sv /…

PDF签名系列(2):PDF的签名值到底存在哪里?

来源&#xff1a;PDF签名系列(2):PDF的签名值到底存在哪里? - 知乎 研究过PDF签名的同学应该见过下面这张图, 来自ADOBE的文档Acrobat_DigitalSignatures_in_PDF.pdf PDF被签名的内容是整个文档除去signature dictionary里/Contents下面的内容. 签过名的哈希值再连同其他一些…

android zip文件读写,如何直接从.zip文件中读取文件而不在android中提取它

我过去几个月一直在研究android,现在我的问题是读取放在SD卡上的.zip文件.我已经成功完成了在SD卡上下载.zip文件的编码.我有img.zip文件下载到SD卡上.这个img.zip包含5个图像文件.现在我可以直接阅读其内容而不是解压缩img.zip …… ???如果是的话请帮忙.我在互联网上看到了…

jQuery的radio,checkbox,select操作

获取一组radio被选中项的值 var item $(input[nameitems][checked]).val(); 获取select被选中项的文本 var item $("select[nameitems] option[selected]").text(); select下拉框的第二个元素为当前选中值 $(#select_id)[0].selectedIndex 1; radio单选组的第二个…

数字签名时间戳服务器的原理

时间戳服务工作流程&#xff1a; ◆ 用户对文件数据进行Hash摘要处理&#xff1b; ◆ 用户提出时间戳的请求&#xff0c;Hash值被传递给时间戳服务器&#xff1b; ◆ 时间戳服务器对哈希值和一个日期/时间记录进行签名&#xff0c;生成时间戳&#xff1b; ◆ 时间戳数据和文…

android x86 笔记本卡屏,笔记本死机卡屏怎么办

笔记本死机卡屏的解决方法&#xff1a;首先按住键盘上ctrlaltdel&#xff0c;弹出任务管理器&#xff1b;然后在弹出任务管理器中选择explorer.exe&#xff1b;接着右键点击explorer.exe&#xff0c;在弹出菜单中选择“结束进程”&#xff1b;最后输如explorer.exe即可。首先&a…

scrapy 伪装代理和 fake_userAgent 的使用

From&#xff1a;https://www.cnblogs.com/hellangels333/p/8918938.html fake-useragent 下载 和 使用方法&#xff1a;https://pypi.org/project/fake-useragent 伪装浏览器代理 在爬取网页是有些服务器对请求过滤的不是很高可以不用ip来伪装请求直接将自己的浏览器信息给伪…

readyState的五种状态详解【转】

在《Pragmatic Ajax A Web 2.0 Primer 》中偶然看到对readyStae状态的介绍&#xff0c;感觉这个介绍很实在&#xff0c;摘译如下&#xff1a; 0: (Uninitialized) the send( ) method has not yet been invoked. 1: (Loading) the send( ) method has been invoked, request i…

【读书笔记】《框架设计(第2版)CLR Via C#》中两个比较有趣的知识点

本季度公司要求阅读《框架设计&#xff08;第2版&#xff09;CLR Via C#》这本书&#xff0c;由于前两个月一直很忙&#xff0c;也没有时间阅读&#xff0c;偶尔阅读也是很晚回家以后临睡前拿起这经典之作读那么一个小节。最近利用周末可以说一鼓作气的看了大半本&#xff0c;感…

Python 使用 Scrapy 发送 post 请求的坑

From&#xff1a;https://www.jb51.net/article/146769.htm 使用 requests 发送 post 请求 先来看看使用requests来发送post请求是多少好用&#xff0c;发送请求 Requests 简便的 API 意味着所有 HTTP 请求类型都是显而易见的。 例如&#xff0c;你可以这样发送一个 HTTP POST …