清晰图解深度分析HTTPS原理 (3)

互联网中的主机对象非常多,但证书机构却不多。计算机产商,会在系统中安装一些根证书机构的信息,其中就包含了这些机构的公钥。这些公钥是在一定程度上是绝对安全的,是可以信任的。客户端可以使用这些公钥对数字签名进行解密。安全问题,终于得到了完美的解决。

系统中预装的证书机构是有限的,但世界上每时每刻申请数字证书却非常多,他们“忙不过来”,因此有了二级证书机构。二级证书机构由根证书机构签发,二级证书机构再去给服务器签发证书。那么此时如何进行证书验证呢?还是一样的道理:

利用根证书机构给二级证书机构签发的时候同样是一份数字证书,其中包含了二级证书机构信息、数字签名、根证书机构信息

服务器的数字证书中包含了二级证书机构的数字证书

客户端使用根证书机构的公钥对二级证书机构的数字签名进行解密得到摘要再进行比对,得到二级证书机构的公钥

使用二级证书机构的公钥对服务器证书进行验证

同理,三级、四级证书机构验证都类同。在浏览器中,我们可以查看网站的证书链:

image.png

可以看到这是一个包含了两级证书机构的证书链,最顶层的证书机构,即是根证书机构。

hash算法

我们会发现,证书并不是直接对服务器信息进行加密,而是利用hash算法得到服务器信息的摘要,再对摘要进行加密。那这里可能会有这些问题:

直接对信息进行加密不可以吗?为什么多此一举?

只对摘要进行加密,那么原文内容不是泄露了吗?

hash算法最常用的就是MD5,他可以把一段数据转化成一个128位的长度的摘要,不同的数据,会得到不同的摘要。

摘要的长度更短,使用非对称加密的效率更高。因此,证书中对摘要而不是直接对信息进行加密可以提高网络效率。而服务器信息本身并不是敏感信息,不怕被黑客截取监听,所以可以使用明文传输。

hash算法不仅为了提高效率,更重要的是可以辨别信息是否遭受了篡改

假如在证书中我们直接对服务器信息进行私钥加密,黑客截取到我们的数据后,他虽然看不懂,但是他可以直接对密文进行篡改。最后接收方解密之后得到的就是一分错误的信息。

如果信息是一个文本,我们可以很明显地辨别出来;但如果是一个数字编号,那么很难知道是否遭受了篡改。举个例子:

服务器发送货物编号123,对123进行加密之后得到098

黑客截取后无法解密,将098修改成048之后发送给客户端

客户端解密048之后得到129,数据遭受了篡改;虽然黑客不知道我们发送什么,但是可以让我们的业务发生错误

此时如果对密文进行hash得到一份摘要,同时对摘要进行加密。客户端拿到数据之后,对密文进行hash再加密,再与服务器发送过来的摘要进行比对即可知道数据是否发生了篡改。黑客不管是修改密文or摘要密文,最后都会导致最后两者的摘要不等。

hash算法的优化

MD5算法是有缺点的,他会发生碰撞。例如一年只有366天,但中国有13亿人口,肯定会有非常多的人生日相同。同理,摘要的长度只有128位,无法唯一表示所有的数据,存在一定的风险:两份不同的数据得到相同的摘要。让黑客变得有机可乘,所以需要引入一种优化方案:HMAC(消息认证码)

HMAC与MD5的差别在于,他并不是直接对数据进行hash,他还需要一个随机数来共同作用hash,只要保证每次的随机数不同,黑客拿不到随机数,也就无法对hash算法进行破解;即使两次的数据一样,因为随机数不同,最终得出的摘要也不同;这更进一步保证了安全。

但是随机数需要通信双方进行协商拟定,所以在证书中无法使用HMAC。但是在HTTPS安全通信中,则可以加入随机数来实现HMAC,提高安全性。

安全模型

这一小节主要讲一下HTTPS为我们建立的宏观安全模型。

需要特别注意的是,HTTPS并不是一个新的应用协议来取代HTTP,而是在HTTP的基础上,增加了网络安全的内容。HTTPS的全称:Hyper Text Transfer Protocol over SecureSocket Layer,建立在安全socket层次上的超文本传输协议,可以认为HTTPS = HTTP+SSL。HTTPS与HTTP、TCP的关系如下:

image.png

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgpsd.html