引言
HTTP的缺点在很多文章都有,他的通信使用的是明文,容易导致数据泄露,篡改等情况,HTTPS就是在HTTP基础上建立SSL加密层,对传输数据进行加密。但是如何进行加密,我用简单的话语总结了一下。
加密算法
其中SSL层功能实现主要依赖于三种加密算法
对称加密
对称加密的双方通过一个密钥来进行加密通信,对称加密的双方加密与解密都用同一种密钥。 举个A与B通信的例子
- 首先A快开始将密钥发给B
- 之后A会将信息先通过密钥进行加密,然后传给B
- B在接收到信息后通过密钥进行解密
这样做的缺点很明显,密钥可能会被截获,这样中间人也可以通过密钥去解开A发送的加密后的信息
非对称加密(RSA)
非对称加密的双方不会再仅凭一个密钥进行加密通信,而是协议了一对密钥,这对密钥包括一个公钥和一个私钥,通过公钥加密的信息只能通过对应的私钥进行解密。我们再举个例子说明这两个密钥是怎么工作的
- 首先A要与B通信,A会获得B手中的一对密钥中的公钥
- A通过这个密钥对信息进行加密发送给B
- B再通过一对密钥中的私钥进行解密
这样劫持方没有B的那个私钥,也就解密不了A发送的信息,这种加密算法的缺陷就是因为加密解密的操作而导致时间过长。并且还有一个缺陷,我们下面说。
对称加密+非对称加密(混合加密)
为了结合对称加密时间快,非对称加密安全的优点,就有了对称加密+非对称加密方案,举个例子
- A需要和B进行加密通信,A通过RSA非对称加密算法获得B的公钥
- A通过这个公钥将一个对称加密中的密钥进行加密并发给B
- B通过私钥解密出这个密钥,
- 接着A与B再通过这个密钥进行加密通信
现在我们结合了这两种加密算法的优点,但这种算法还是具有风险: 我们无法确认在1阶段时获得的公钥是对的,这也是上面说的非对称加密算法的缺陷。并且在传递信息过程中,虽然无法被解密,但是可以被篡改。
数字证书
解决的上面两个问题,此时就需要引入了证书颁发机构(Certificate Authority,简称CA)
数字签名
首先我们要解决的是校验数据完整性,以防止数据被篡改的可能,这时我们就要用到数字签名,这时通过混合加密算法不是在获得接收方的公钥,而是获得接收方的数字签名,具体获得过程如下
- B不再直接给A自身的公钥,而是将B自身的公钥,自身的个人信息等通过Hash算法生成一段消息摘要
- B将这段消息摘要通过CA的私钥进行加密获得数字签名
- B将数字签名发送给A
于是我们发现本质区别是多加一步通过Hash算法生成消息摘要,但这也不足以验证数据是否被篡改,于是我们再多加一步,在数字签名的基础上添加公钥以及自身信息组成数字签名,至此我们的步骤变成
- B不再直接给A自身的公钥,而是将B自身的公钥,自身的个人信息等通过Hash算法生成一段消息摘要
- B将这段消息摘要通过CA的私钥进行加密获得数字签名
- B在数字签名的基础上添加了自身的公钥、自身的个人信息等组成数字证书
- B将数字证书发送给A
当A接受到数字证书后
- A通过Hash算法将数字证书中B的公钥,B的个人信息重新生成一段新的消息摘要
- A通过CA公钥将数字证书中的数字签名解密获得B生成到达消息摘要
- A将解密的消息摘要与阶段1中生成的消息摘要进行比对,如果没有差异则表示没有被篡改
- 至此A获得B的公钥
这其中,CA的作用是为了防止发送数字证书时被替换掉了公钥,消息摘要等
最后的最后,A终于如愿获得了B的公钥