一分钟弄懂HTTPS加密传输过程

虫子君 2018.7. 519:18:28 评论 59

在过去的几年里,业界巨头Google利用旗下Chrome浏览器大力推行HTTPS,没有使用SSL/TLS进行加密的网站一律被标记为不安全。作为一个开发人员,连HTTPS原理都不懂的话是注定要被鄙视的。咱还是不废话,直奔主题吧。

先来一张图描述HTTPS的交互过程:

一分钟弄懂HTTPS加密传输过程
非常的简单明了,看完之后想一想整个过程需要用到哪些加密算法。

上图需要用到的算法有:非对称加密、对称加密、单向散列。

简化步骤如下:

1.客户端发起请求;

2.服务端返回证书;

3.客户端从验证证书得到服务端的公钥;

4.客户端生成随机数,并用公钥加密后发送给服务端;

5.服务器根据随机数生成对称密钥;

6.用对称密钥加密数据传输;

什么是证书

这里的证书其实就是使用权威机构的私钥加密过的服务器公钥,所以制作证书通常是要付费的。那么问题来了,能不能自己制作一个证书?

为什么不能直接下发服务器公钥给客户端
细想一下,如果直接下发公钥给中间人拦截获取了,那么之后的通信过程就无安全可言了。

如何验证证书的可靠性?

答案就是使用数字签名,上图的编号就是用来验证证书的有效性的,权威机构颁发给不同网站的证书都只能是唯一的。

浏览器通常是怎么解密出服务器的公钥的?

我们都知道,在非对称加密中,用私钥加密的数据只有公钥才能解密,那么客户端一开始的公钥是怎么获得的?其实任何的操作系统比如Windows 10和Mac本身就已经带有受信任机构的根证书。(ps:盗版系统的危害不言而喻...)

为何HTTPS建立之后使用对称算法加密?

因为只要保证密钥不会泄漏出去,那么数据就是安全的,而且非对称加密算法相当耗费资源,不可能也没必要每次传输都使用。

只要理解了以上几个问题,那么整个过程就非常清晰了。

推荐阅读:

阿里云轻量应用服务器配置好了https使用cdn仍需再配置https

虫子君

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: