https我所知道的一切
一、概述
这几天闲暇的时候没什么事情做,突然对 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、客户端和服务端可以通过生成的随机数进行对称加密传递数据了