https安全通信的原理

2019-01-29  本文已影响0人  无聊之园

http协议明文传输:三次握手之后,直接交互。互相发送的数据都是完全明文传输。一旦在客户端到服务端的中间过程中,被黑客截获了,那么,服务端和客户端的交互信息就完全暴露了。同时,黑客也很轻易的篡改交互数据,很不安全。

那么如何保证这个安全通信呢

第一步、如果用对称加密的话:
客户端和服务端拥有相同的密钥,客户端用这份密钥对数据进行加密,发送到服务端,服务端用这份数据进行解密。

如果这样的话,客户端需要保存所有url对应的密钥,因为不同url采用的密钥是不同的,而且一个url采用的密钥是相同的,即使url能保存所有的密钥,也是会被别人破解的。

所以,如果能够有一个对称密钥,是绝对安全的,那么就能保证通信的安全。

那么这个绝对安全的密钥从哪获取呢?

第二步、如果用非对称加密传输这个对称密钥呢?

如果客户端从服务端获取了一个公钥(这个公钥明文传输,即使被截获了也无所谓),然后生成一个对称密钥,用这个公钥对这个对称密钥进行加密,然后发送给服务端,因为服务端有私钥,所以可以解密出这个密钥。而中间过程即使被截获了,别人没有私钥,也破解不出其中加密的对称密钥。
如此,客户端和服务端就能够有一个绝对安全的对称密钥,就可以保证通信安全了。

但是,前面只说了截获信息,还有修改信息没说。

假设,建立连接之后,服务端发送给客户端的公钥,被一个中间程序,保存下来了,并且伪造一个假的公钥发送给客户端,然后客户端用这个假公钥发送对称密钥给服务器,然后经过中间程序的时候,因为这个假公钥是中间程序生成的,它知道私钥,所以可以对其解密出对称密钥,然后用之前保存的真的公钥加密这个对称密钥,然后发送给服务端,之后,服务端和客户端用这个对称密钥进行通信的时候,由于对称密钥中间程序知道了,所以整个过程就泄露了。

所以,如果,中间程序伪造的假的公钥,客户端能够被识别出来,就能保证信息安全了。

第三步、那么怎么才能识别出假的公钥呢?

答案是,ssl证书。
再进行数据交互之前,服务端发给客户端ssl证书。
证书内容有:
1、证书的发布机构 CA
2、证书的有效期
3、公钥
4、证书所有者
5、签名
6、等等
假设中间层伪造了ssl证书,然后发送给客户端,客户端会对ssl证书进行真假校验。浏览器内置了受信任的证书发布机构 CA(这也就是为什么发布ssl证书的机构需要得到浏览器支持了)。浏览器没有的CA就是假的。而且,如果找到CA,浏览器取出内置的CA的公钥,对服务器发来的ssl证书的签名进行解密(因为ssl证书发布机构的私钥,黑客是无法知道的,所以用公钥解密得到的值是不可能正确的),也就是能分辨出假的ssl证书。(分别假的证书,使用的也是非对称加密的过程)。
这样,浏览器就能安全的得到真正的公钥,就能进行传输对称加密的密钥,之后进行安全传输了。(这里的能实现安全的关键点在于:浏览器内置一份CA,否则无论如何,都不可能安全)。

SSL的私钥在服务端保存,SSL证书需要向认证机构申请认证,认证机构必须是浏览器认可机构,也就是浏览器内置了的CA。

所以https到底是怎么回事:非对称加密传输对称加密的公钥,再加上ssl证书保证非对称加密的公钥不被伪造就完了。

参考地址:https://blog.upyun.com/?p=1347

上一篇 下一篇

猜你喜欢

热点阅读