一、概述
这几天闲暇的时候没什么事情做,突然对 https 的加密算法有了很浓厚的兴趣,学着学着就把一些知识都学了一下,那这篇文章主要讲了以下几个方面,首先说了一下 http 存在的不足,然后说一下我们 http 中用到的加密算法,最后说一下一个请求在我们的 https 中执行的流程,好了话不多说我们赶紧进入我们的正题。
二、http 中存在的不足
我们都知道 https 比 http 要安全,那到底 http 差在哪,我总结了以下几个原因:
1、http 没有对数据进行加密,我们是可以通过抓包抓取到数据的,这样数据可能被别人利用
2、客户端和服务端没有进行身份验证,导致我们的请求可能会被劫持。
3、对传递的信息完整性没有校验,这样就有可能有人在传递过程中篡改我们的信息
那安全的 http 应该具备什么功能呢
就是因为这样的场景我们的 https 就诞生了,https 协议主要是依赖 TSL/SSL 协议,提供了身份验证,信息加密,和完整性校验的功能,解决了 http 中的问题,我用一个公式来表示 https
https = http + TSL/SSL
那下面我们就看一下我们的 https 是如何进行加密的
三、https 中的加密算法
说到加密我们首先说一下加密算法,一般加密算法分为两种,第一种是对称加密,第二种是非对称加密算法
对称加密:我们加密的密钥和解密的密钥是相同,例如 DES 加密
对称加密强度很高,但是存在一个很大的问题就是无法安全生成和保管密钥,如果每次请求都用相同的密钥,那会存在非常大的风险。
非对称加密:加密的密钥和解密的密钥是不同的,加密的密钥我们称之为公钥,解密的密钥我们称之为私钥。例如 RSA 算法。
当我们用非对称加密算法对我们的对称密钥进行加密的时候使我们的对称加密就变得安全了,就是因为这个加密使我们的 https 速度慢了很多。
那我们的 https 中首先是在我握手的时候用非对称加密获取我们的对称加密的密钥,然后在传递数据的时候使用对称加密。
可能这么说有点笼统,那下面我说一下我们的一个完整的 https 请求,你可能就会明白许多
四、一个完整的请求
我们先来看一个图片
我们一步一步说啊
1、客户端进行请求,传递 SSL 协议版本,支持的加密算法和 hash 的算法。
2、服务端选择客户端传递过来的最优的加密算法和 hash 算法,还有协议版本
3、服务端发送报文,报文中包括认证证书(包括非对称加密的公钥,过期时间,服务器地址,颁发机构)
4、服务端发送握手完成
5、客户端对传递过来的证书进行解密,然后通过根证书进行验证,主要验证证书是否过期,颁发的机构和服务器地址,验证通过的话,根据之前约定的 hash 算法生成一个随机数,然后通过公钥进行加密这个随机数,传递给服务端,那这个随机数就是我们对称加密的密钥。
6、客户端发送 finish 表示握手完成
7、客户端和服务端可以通过生成的随机数进行对称加密传递数据了