这篇文章主要讲的是 http 各个版本的加密方式,在大家深入了解 http 协议的时候,可以加以辅助。
为什么 HTTP 在传输信息的时候要加密?
其实这个问题很简单,我们不希望我们发送出去的信息被第三方看到甚至是修改,对 HTTP 协议进行数据加密可以在一定程度上避免我们在互联网上“裸奔”。
加密方式
加密方式有两种:对称加密 和 非对称加密
以下用 key 代指秘钥
对称加密
对称加密:产生一个秘钥,可以用这个秘钥 对进行数据加密,同时也可以用这个秘钥进行对数据的解密。
加密过程:要传输的信息和key一起经过算法组合在一起,生成一个加密的信息,这个加密信息用于传输
解密过程:加密信息与key经过算法计算还原得到我们需要的信息
对称加密的加密大致流程如图所示:
HTTP 对称加密的使用
根据对称加密,我们可以得到 HTTP 加密的加密方式和过程,服务端向客户端发送一个加密方式,双方约定以什么方式进行加密,客户端将 key 保存,在之后的双方通信过程中,对所有的信息都以这个 key 进行数据加密和解密。
但是这种方式也是有风险的,在服务端和客户端第一次数据通信,也就是约定 key 的时候,是有被第三方获取到这个 key 的风险。所以,对称加密也不是很安全。
非对称加密
非对称加密:产生一对秘钥,一个用于加密,一个用于解密。
秘钥对:由公钥和私钥组成。
加密过程:信息通过 公钥 进行加密,生成加密信息
解密过程:加密信息通过 私钥 进行解密,生成解密信息
非对称加密的大致流程:
HTTP 非对称加密的使用
在进行数据传输之前,服务端会向客户端发送 公钥,这个公钥用于服务器使用 私钥加密的信息 进行解密 操作。但是 私钥 只存储于服务端,那么服务端向客户端传输的 公钥加密信息就无法解密,这样客户端就无法解析到服务端传输的加密的信息。为了解决无法通信的状况,在 约定公钥 之后,客户端会向服务端发送一个通过公钥加密的 key ,这个 key 用于后续信息传输加密。服务端和客户端使用 key 加密传输的数据,可以进行正常的数据通信。
这种非对称加密的方式也是不安全的,因为在客户端向服务端第一次传输公钥的时候,这个 公钥 如果被第三方获取到,那么第三方就会生成一个秘钥对,将公钥third 发送给客户端,后续客户端再使用公钥third 加密后续通信需要的加密条件key,第三方将此信息捕获后 直接获取到 key 然后工作服务端的公钥加密后发送给 服务端,后续的客户端和服务端的数据通信在第三方看来就是明文通信,这样就可以对服务器和客户端发送的数据进行 查看、修改或替换。
HTTPS证书加密
HTTPS 使用的是证书加密,加密方式实质上也是非对称加密。
我们网站使用的证书是由各国的证书机构颁发的,证书机构也是包含一个秘钥对,公钥对外公开任何人都可以获取,私钥自己使用不向外公开,私钥用于信息加密,公钥用于信息解密。我们向证书机构支付费并将自己服务器的公钥发送过去,然后就会生成一个证书,提供给服务器。这个证书中包含很多的信息,主要有:服务器的网址(未加密)、证书颁发机构(未加密)、证书机构私钥加密后的服务器公钥、私钥加密的证书签名。
通过证书进行加密,虽然可以通过证书公钥解密获取到服务器公钥,但是无法对信息进行篡改,因为拿不到证书机构的私钥,在解密后就无法进行加密,使用非该机构的加密方式加密信息,客户端在接收信息后校验就无法通过,数据通信就无法完成。
证书的验证方式:
证书签名可以通过 证书机构公钥解密拿到,这样就可以进行验证
HTTP证书加密的过程
由于证书校验的存在,第三方在第一步篡改证书信息后,客户端对证书的验证就无法通过,通信就不会建立。在此条件通信中,第三方只能获取到服务器的公钥,但是没有服务器私钥就无法解密,也就无法获取到二者约定的key,无法对数据进行查看、修改、替换。HTTPS 加密数据通信就达成了。
END
以上就是对 HTTP协议 中加密方式的探讨,其实无论是使用哪种加密方式,到最后都会使用对称加密,只不过都是为了对称加密的秘钥不被第三方获取。
欢迎各位小伙伴在评论区交流或斧正。