此篇承接上一篇加密和哈希,并且回答上一篇提出的问题。
此篇文章的逻辑图
证书
在说数字证书之前,先说一下什么是证书,其实在我之前不让苹果开发者账号折磨我一文中已经说过,这儿引用一下:
什么是证书?证书就是:证明证书拥有者拥有证书上所说的能力。一个证书要涉及到颁发者,拥有者,证明拥有者拥有了什么能力。例如,CET-4证书;颁发者:学校,拥有者:自己,证明的能力:英语达到四级水平。以上是证书通用的概念,不论是什么证书,都应该首先想到上面几点。
数字证书:
颁发者:CA证书授权(Certificate Authority)中心
拥有者:申请到证书的通信者
证明的能力:身份认证,也就是说证明我就是我
数字证书颁发者CA
数字证书认证机构(英语:
Certificate Authority
,缩写为CA
),也称为电子商务认证中心、电子商务认证授权机构,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。CA
中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。CA
机构的数字签名使得攻击者不能伪造和篡改证书。
CA认证中心之间的关系
CA认证中心之间的关系如下图所示(图1-0):
CA认证中心
之间是一个树状结构,根CA认证中心
可以授权多个二级的CA认证中心
,二级CA认证中心
也可以授权多个三级的CA认证中心
...如果你是数字证书申请人
,你可以向根CA认证中心
,或者二级,三级的CA认证中心
申请数字证书,这是没有限制的,当你成功申请后,你就称为了数字证书所有人
。值得注意的是,根CA认证
中心是有多个的,也就是说会有多棵这样的结构树。
CA认证中心的权威性
上图(图1-0)中的CA认证中心所有人
,他们都有一个数字证书,和属于自己的公钥和私钥,这些是他们的父CA认证中心
颁发给他们的。根CA认证中心
的证书称为根证书
,根证书自己认证自己的有效性,根证书是整个证书体系安全的根本,如果根证书出了问题,他下面所有子证书都不可被信任,因为子证书都是依赖根证书证明自己的有效性的,从而形成证书信任链。
对于私钥:CA认证中心/数字证书所有人自己保存,不公开。
对于公钥:CA认证中心/数字证书所有人会把公钥存在他的CA认证中心的数字证书内。
数字签名过程
数字证书使用数字签名作验证,简单来说证书都会包含3
个部分:证书内容(F
),加密算法(A
,其实有两个,一个哈希算法,一个加密算法),F
加密密文(F'
)。首先,F
会被散列算法SHA1
计算出hash
值h1
(称为括号中描述不准确感谢@xxxxxx_8705的指正,然后128bit
的摘要)h1
会被发布这个数字签名的CA认证机构
的用私钥进行RSA
加密,注意:是发布这个数字签名的CA认证机构
,如果现在被加密的数字证书是属于二级CA认证机构
的,那么用来加密这个证书的私钥是根CA认证机构
的私钥!RAS
加密完后,就形成密文F'
。整个数字签名过程如下图(图2-0)
数字证书验证合法性
当你要验证这个数字证书可信/合法性时,你需要找到你的上一层CA认证中心
的数字证书,并且从中获取公钥,把数据证书中的密文F'
进行RSA
解密,如果得出的值h2
和h1
比较(h1
可以立即用数据证书中的F
现场算出来),如果相等,则认为证书是可信的,合法的!由于你是不可能知道上一层CA认证中心
的私钥,所以你无法伪造一个可以用上一层CA认证中心
公钥解密的数字证书!数字证书验证合法性过程如下图(图2-1)
由于一个数字证书是基于上层的数字证书作验证的,那么又怎么验证上层的数字证书是否合法呢?这就会出现一直递归上去的现象,也就是上面说的形成证书信任链。事实也是这样的,验证一个证书是否合法,需要验证到他的最顶层的根证书是否合法!所以上面说到根证书是整个证书体系安全的根本。
数字证书的组成
证书详细组成可自己打开电脑钥匙串随意选一个证书去浏览一下,我这里贴图一张不做详细说明参考下图(图3-0),想要详细了解可看我下面参考的文章浅析数字证书中证书组成部分。
总结
数字证书的制作使用了数字签名,每一个数字证书里面都包含了申请者的公钥,所以上文提出的问题就解决了,Alice
不直接要Bob
的公钥,而是去要一个Bob
去CA
申请的数字证书,数字证书中有Bob
的公钥,而且数字证书证明了他就是Bob
(也就是开篇提到的证明了什么,我就是我),Alice
只要验证数字证书没有问题就可以开始通信了。