前面几篇文章,主要是和大家聊了聊关于HTTP的一些知识,关于HTTP的有关知识暂时先告一段落吧。接下来想和大家聊一聊关于HTTPS的一些知识。其实这一块,一直在酝酿着怎么写,因为HTTPS的知识实在是太复杂了,而把我了解的知识转化成大家都能理解的话更是难上加难。但是,这一块知识非常重要,因为现在的大型网站都慢慢的将HTTP访问变成了安全性比较搞的HTTPS访问,这也算是一种趋势。好了,废话不多说了,咱们开始吧。
什么是数字证书?
就跟每个人的身份证能够确认一个人的身份一样,数字证书同样是对某网站的一种身份。通过数字证书,我们可验证某网站的真实性。那么上面的问题就可以解决了,只要我们验证了服务器的真实性,那么我们就可以信任服务器下发的非对称加密的公钥是真实有效的,而不是被掉包的。
证书的颁发者是谁呢?
一般来说,数字证书的颁发者是第三方的证书颁发机构(CA)来颁发的。
那么数字证书,是怎么样制作的呢?
首先服务器将非对称加密算法M(用于加密协调过程)的公钥传送给第三方证书颁发机构。然后第三方颁发机构使用非对称加密算法N的私钥对服务器的公钥进行加密,然后添加上一些其他的信息(如上图)制作成一种证书之后,然后再发送给服务器!
服务器将数字证书发给客户端,让客户端验证一下自己的真实身份。客户端会用本地存储的非对称加密算法N的公钥(注意与上面的非对称加密算法N对应)去解密用非对称加密算法N加密的公钥(该公钥是非对称加密M的公钥)!
如果解密成功,那么我们可以认为证书有效,否则无效!
那么问题又来了!!
假设现在有一个坏人(当然不是小酷),将自己的非对称加密算法L的公钥提交给第三方证书颁发机构,那么第三方证书同样也会用非对称加密算法N的私钥进行加密,同样会给坏人制作出证书!然后在服务器将证书发给客户端验证身份的时候,坏人用自己的证书将服务器的证书掉包了!客户端同样还是会用非对称加密算法N的公钥去解密,而且一样能够解密成功!那么,对于客户端来说,他无法判断这个证书是来自于服务器的还是来自于那个坏银的!怎么办?怎么办?
我们看数字证书的内容格式上可以发现,内容中有“数字签名”这一项!数字签名也就很好的解决了上面那个问题。具体是怎么玩的呢,咱们接着往后看!
数字签名:
数字签名你可以理解为咱们快递单上的快递单号,唯一代表这一张证书。
服务器在制作数字证书的过程中,第三方证书颁发机构按照某种生成签名的算法(比如说MD5),将一些数据项通过签名算法计算出一串字符串---数字签名!
服务器将证书发送给客户端,客户端按照证书中签名算法生成签名,并与证书中的签名进行比对!如果比对无误,则认为该证书没有被修改过!反之亦然!
当前这里说的只是客户端对服务器的身份验证,属于单向验证!在实际应用过程中,服务器也可能需要对客户端进行验证,这种客户端验证服务器证书,服务器验证客户端证书叫做双向验证。至于单向验证和双向验证具体是什么,咱们后面再细说!