分享

数字证书

 联合参谋学院 2019-01-08

看过很多次数字证书的知识,总是看了忘,忘了再看,看了又忘,是时候好好总结一下了。
感谢敏捷的水大哥,讲得很生动很透彻。但我觉得也有不足的地方,那就是对指纹,指纹算法,签名,签名算法这几个概念没有梳理得很透彻。

签名与加密
在这里,首先要说一下签名和加密的知识。这里主要解释一下签名,签名就是在信息的后面再加上一段内容,可以证明信息没有被修改过,怎么样可以达到这个效果呢?一般是对信息做一个hash计算得到一个hash值,注意,这个过程是不可逆的,也就是说无法通过hash值得出原来的信息内容。在把信息发送出去时,把这个hash值加密后做为一个签名和信息一起发出去。 接收方在收到信息后,会重新计算信息的hash值,并和信息所附带的hash值(解密后)进行对比,如果一致,就说明信息的内容没有被修改过,因为这里hash计算可以保证不同的内容一定会得到不同的hash值,所以只要内容一被修改,根据信息内容计算的hash值就会变化。一般来说,我们的项目里面就是这么做的。

先让我们来考虑一个问题?假如不怀好意的人修改信息内容的同时也修改hash值,从而让它们可以相匹配。为了防止这种情况发生,我们可以做到的就是为我们的签名做升级,那就是对签名加密,然后连同我们的信息一起发送。

中间人攻击
先来看看中间人攻击的概念。假如刘冬和黄丽之间要互换小情书,总要有一个信使,那就是张叔叔。这个人可能就是中间人,对所加密对内容进行攻击。下面来看看步骤:

  1. 张叔叔自己生成一个公私钥,和冬冬以及丽丽交换
  2. 张叔叔冒充丽丽把自己的公钥发给冬冬
  3. 冬冬用张叔叔的公钥对信件加密
  4. 张叔叔用自己的私钥解密就可以看到冬冬给丽丽的邮件
  5. 张叔叔冒充冬冬把自己的公钥发给丽丽
  6. 丽丽用王叔叔的公钥对信件加密
  7. 张叔叔用自己的私钥解密就可以看到丽丽给冬冬内容

以上的步骤是原文的解释,我认为是错的,应该改成下面的说法:

  1. 张叔叔自己生成一个公私钥,用公钥和冬冬以及丽丽交换,此时张叔叔拥有自己的公钥私钥以及冬冬和丽丽的公钥
  2. 冬冬用自己的私钥加密,张叔叔就可以用冬冬的公钥查看冬冬的邮件了,然后重新用自己的私钥加密发给丽丽,此时丽丽用以为是冬冬的公钥实际是张叔叔的公钥去解密查看,经过信息的发送流程后丽丽查看到了冬冬的邮件,完全没有什么疑问
  3. 丽丽发送消息也是一样的原理,在这个过程中张叔叔担当查看并转发的功能
  4. 为什么说原文是错的呢,因为发送消息的原理是:发送方冬冬用自己的私钥加密丽丽用冬冬的公钥解密的,这只有用私钥加密公钥解密才能确定这个邮件是冬冬发送的而不是张叔叔修改操作过的。

数字证书
那么张叔叔要让冬冬相信他给的公钥就是丽丽的公钥,那么他可以开一个证明,比如找权威机构“小陈”给开个介绍信,介绍信上给加个公章。那么这里的介绍信就是数字证书, 公章就是数字签名, 那么”小陈”就是颁发证书的机构CA(Certificate Authority),也就是证书授权中心。

CA: CA 是“Certificate Authority”的缩写,也叫“证书授权中心”。
它是负责管理和签发证书的第三方机构,就好比例子里面的“小陈”。一般来说,CA 必须是大家都信任的、认可的。因此它必须具有足够的权威性。只有冬冬和丽丽都信任的人才能来证明。

CA证书: CA 证书,就是CA颁发的证书。

证书之间的信任关系: 用一个证书来证明另一个证书是真实可信。

证书信任链: 证书之间的信任关系,是可以嵌套的。比如,A 信任 A1,A1 信任 A2,A2 信任 A3……,这就是证书的信任链。只要你信任链上的第一个证书,那后续的证书,都是可以信任的。

根证书(Root Certificate): 下图,处于最顶上的树根位置的那个证书,就是“根证书”。除了根证书,其它证书都要依靠上一级的证书来证明自己。那谁来证明“根证书”?根证书自己证明自己,这时候我们用户就需要自己选择是否相信某个根证书。根证书是整个证书体系安全的根本。如果某个证书体系中,根证书不再可信了,那么所有被根证书所信任的其它证书,也就不再可信了。

这里写图片描述

证书内容

我们来看看国内百度的证书,点击绿色浏览器绿色的锁就可以看到证书。
这里写图片描述
然后我们需要解释一这个证书的内容:

1 . 组织 (证书的发布机构)
指出是什么机构发布的这个证书,也就是指明这个证书是哪个公司创建的(只是创建证书,不是指证书的使用者)。对于上面的这个证书来说,就是指”GlobalSign nv-sa”这个机构。

2 . Public key (公钥)
首先,我们先给出自己论断,公钥就是用来对消息进行加密的,但是公钥在数字证书里面充当什么角色呢?这里的公钥通俗一点说留给冬冬和丽丽之间通信用的,跟我们的数字证书认证关联不大。
这里写图片描述

3 . Thumbprint, Thumbprint algorithm (指纹以及指纹算法)
这个是用来保证证书的完整性的,也就是说确保证书没有被修改过,其原理就是在发布证书时,发布者根据指纹算法(一个hash算法)计算整个证书的hash值(指纹)并和证书放在一起,这个hash值就是我们在上面所说的hash串。使用者在打开证书时,自己也根据指纹算法计算一下证书的hash值(指纹),如果两者一致,就说明证书没有被修改过,因为证书的内容被修改后,根据证书的内容计算的出的hash值(指纹)是会变化的。 注意,这个指纹会使用CA这个证书机构的私钥用签名算法(Signature algorithm)加密后和证书放在一起,只有用CA的公钥才能解开这个签名。

所以在这里,要非常明确指纹和指纹算法的区别。指纹算法是指一种hash的方法,是一种加密的算法(我们一般使用MD5或者SHA1,而且一般没有秘钥,所以是不可逆的。指纹是指数字证书内容的一个摘要。这两样东西合起来的效果是保证证书内容不被修改。

数字证书保证身份认证的过程
首先是申请证书:
1. baidu.com 向GlobalSign nv-sa) 申请证书
2. GlobalSign nv-sa 生成一对公钥A(上文所说的Public key,给客户用的)和私钥B(留给baidu)。
3. GlobalSign nv-sa有自己的公钥C和私钥D
4. GlobalSign nv-sa 把Issuer, 公钥A, Subject(一般是网站的域名),Valid from,Valid to等信息以明文的形式写到证书里面,然后用一个指纹算法(SHA1或者MD5)计算出这些数字证书内容的一个指纹(摘要),并把指纹和指纹算法用自己的私钥D进行加密,然后和证书的内容一起发给baidu.com

用户使用证书
1. 用户访问baidu.com 这个网站
2. baidu.com 把证书发给用户
3. 浏览器读取证书, 浏览器发现证书机构是GlobalSign nv-sa,然后会在操作系统中受信任的发布机构的证书中去找GlobalSign nv-sa的证书,如果找不到,那说明证书的发布机构是个假的,或者不是被权威机构认证的,证书可能有问题,程序会给出一个错误信息
4. 如果在系统中找到了GlobalSign nv-sa的证书,那么应用程序就会从证书中取出GlobalSign nv-sa的公钥C,然后对baidu.com公司的证书里面的指纹和指纹算法用这个公钥C进行解密,然后使用这个指纹算法计算baidu.com证书的指纹,将这个计算的指纹与放在证书中的指纹对比,如果一致,说明baidu.com的证书肯定没有被修改过并且证书是GlobalSign nv-sa发布的,证书中的公钥肯定是baidu.com的公钥A, 然后我们就可以用这个公钥A和baidu.com进行通信,因为只有baidu.com 有私钥B, 所以只有baidu.com才能解开信息。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多