前言
你可能已经听过很多CA机构,数字证书,签名等等一系列的东西,但是可能都不太在意,认为其根本没什么用。
作为一个前端,讲道理,你想得没错,确实没什么用,只是在学习https的时候如果理解了这些东西的话会有更好的理解。多学点东西总不会错吧~
CA是什么?
CA是Certificate Authority的缩写,也叫“证书授权中心”。
通俗一点讲,就是发证书的机构,权威机构。
打开你的ie浏览器--internet选项--内容--证书
可以看到这里有个受信任的根证书颁发机构
,这些里面的颁发者就是我们所说的CA
,那么这些CA
是哪里来的呢?
全球权威的CA,就那么几个公司,这几个公司的证书,已经被各软件厂商设置成可信任的根证书
了,内置在系统中了。至于怎么认证为权威,我就不太懂了,他们颁发证书的流程也不太清楚了,反正你就信他们就完了,如果他们出错了,就会被取消CA资格。(提一个沃通,因为乱jb发证书被取消了资格)。当浏览器判断证书颁发机构合法与否的时候,就会查看这个机构有没有存在于自己的系统内置中。
上图中还有一个中间证书颁发机构
,其实这里是有一个证书链
的,上面那个根证书颁发机构发一个证书给A,然后A又发了一个证书给B,那么B也是合法的,A就是这个中间证书颁发机构。根证书->A->B就是一条证书链,类似于朋友介绍朋友。
值得一提的是,我们可以自己创建证书,发给自己,自己翻身做主当CA。可以参考12306网站。
数字证书是什么?
数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。它是由权威机构——CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。
我们可以通过下面这样来获取我们浏览中的网站的证书信息。
数字证书的内容主要有哪些呢?
- 公钥内容
- 颁发者
- 使用者
- 有效期
- 签名
- 其他信息
加密算法
提到签名
之前,我们要先了解下大概的加密算法有哪些。
- 对称加密
- 非对称加密
- hash算法
对称加密
特性:加密解密用同一个密钥。像指纹锁,又可以加密又可以解密。
- 明文->通过密钥加密->密文
- 密文->通过密钥解密->明文
优点:加密很快
缺点:密钥一泄密,全部人玩完。比如一个公司公用一个密钥,你不能要求每个员工都做好了保密工作,一旦一个员工泄密了密钥,因为对称加密用的是同一把钥匙,那么所以人的密文都能被解开了。如果你要1对1用不同密钥的话,那管理密码又是另外一个难题了。
非对称加密
特性:加密和解密用的不一样的钥匙,就像传统锁,一个是锁头,一个是钥匙。
- 明文->公钥->密文
- 密文->密钥->明文
优点:跟上面那个相反,安全性更高,即使被泄露了一个员工的密钥,其他人的秘密也不会被泄露。管理密码方便。
缺点:加密很慢,比上面那个可能慢上100倍。这也是为什么HTTPS不全程使用非对称加密的原因。
hash算法
特性:单向加密,无法逆转,常见有md5。能够隐藏原始信息,像我们的密码,我们只需要对比md5后的密码是否一致,不用关心原文是什么。
讲道理,优缺点都要有对比嘛,这个没啥好对比的,所以没什么优缺点。
签名是什么?
签名是一串经过hash计算的字符。用于判断证书是否合法。
在上面我们提到了数字证书的内容,里面有一个公钥,这个公钥是啥?
CA机构拥有一对非对称加密的公钥密钥,在发证书的时候啊,就会把这个公钥给出去,他就自己偷偷保存着密钥。
CA给证书签名的流程如下:
- 首先生成一个文件
P
,内容有公钥,颁发者,使用者,有效期等。 - 然后把证书内容
P
经过hash算法计算,得到一个hash值H
- 最后使用自己私藏的私钥对
H
进行RSA加密(非对称),得到签名信息S
然后将内容P,签名S连成一个文件,这个文件就是所谓的数字证书了。所以数字证书里,包括证书持有者的身份信息,证书信息,证书持有人的公钥,以及签名信息。
签名有什么用?
是用来验证我们这个证书是否为权威CA机构所发或者证书是否被篡改。
现在假设客户端得到了这个证书,如何确认这个证书属于谁的呢?
- 首先,证书里有公钥,那我们可以用这个公钥解密这个签名
S
因为CA用的是RSA非对称加密,而且这个公钥是公开的。那我们根据前面介绍的加密算法中可以知道:签名S
->经过公钥解密->得到H'
-
然后,我们对比这个
H'
和我们上一节讲到的H
- 如果两者一致,那么就是合法的,正常的
- 如果两者不一致,那么可能是内容被篡改或者不是由CA签发的
如果不合法呢,那么客户端就会弹出一个框,说XXX不受信任,可能潜藏危险,是否要继续前往
一般这个情况下,男性朋友都会义无反顾地选择继续前往,这是不值得提倡的。
总结
CA证书发一个证书给网站,证书里包括了一些颁发者的信息,签名以及过期时间等等信息。客户端访问网站的时候,会检查你的证书是否合法,是否被黑客篡改,通过判断用公钥解密签名后和原来的hash值是否保持一致来决定是否弹窗警告。
如有错误,请在评论区指出,顺便打个广告☞leelei的博客
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。