https我所知道的一切

一、概述


  

   

这几天闲暇的时候没什么事情做,突然对 https 的加密算法有了很浓厚的兴趣,学着学着就把一些知识都学了一下,那这篇文章主要讲了以下几个方面,首先说了一下 http 存在的不足,然后说一下我们 http 中用到的加密算法,最后说一下一个请求在我们的 https 中执行的流程,好了话不多说我们赶紧进入我们的正题。


二、http 中存在的不足



  

我们都知道 https 比 http 要安全,那到底 http 差在哪,我总结了以下几个原因:


1、http 没有对数据进行加密,我们是可以通过抓包抓取到数据的,这样数据可能被别人利用

2、客户端和服务端没有进行身份验证,导致我们的请求可能会被劫持。

3、对传递的信息完整性没有校验,这样就有可能有人在传递过程中篡改我们的信息


那安全的 http 应该具备什么功能呢

1、服务端验证
2、客户端验证
3、信息的完整性(客户端和服务端收发的信息是相同的)
4、客户端和服务端的传输数据时加密的
5、效率,要掌握传输的速度
6、要适应大部分的场景

就是因为这样的场景我们的  https 就诞生了,https 协议主要是依赖 TSL/SSL 协议,提供了身份验证,信息加密,和完整性校验的功能,解决了 http 中的问题,我用一个公式来表示 https


https = http + TSL/SSL


那下面我们就看一下我们的 https 是如何进行加密的



三、https 中的加密算法



说到加密我们首先说一下加密算法,一般加密算法分为两种,第一种是对称加密,第二种是非对称加密算法


对称加密:我们加密的**和解密的**是相同,例如 DES 加密

对称加密强度很高,但是存在一个很大的问题就是无法安全生成和保管**,如果每次请求都用相同的**,那会存在非常大的风险。


非对称加密:加密的**和解密的**是不同的,加密的**我们称之为公钥,解密的**我们称之为私钥。例如 RSA 算法。


当我们用非对称加密算法对我们的对称**进行加密的时候使我们的对称加密就变得安全了,就是因为这个加密使我们的 https 速度慢了很多。


那我们的 https 中首先是在我握手的时候用非对称加密获取我们的对称加密的**,然后在传递数据的时候使用对称加密。

可能这么说有点笼统,那下面我说一下我们的一个完整的 https 请求,你可能就会明白许多


四、一个完整的请求


  

我们先来看一个图片

https我所知道的一切

我们一步一步说啊

1、客户端进行请求,传递 SSL 协议版本,支持的加密算法和 hash 的算法。

2、服务端选择客户端传递过来的最优的加密算法和 hash 算法,还有协议版本

3、服务端发送报文,报文中包括认证证书(包括非对称加密的公钥,过期时间,服务器地址,颁发机构)

4、服务端发送握手完成

5、客户端对传递过来的证书进行解密,然后通过根证书进行验证,主要验证证书是否过期,颁发的机构和服务器地址,验证通过的话,根据之前约定的 hash 算法生成一个随机数,然后通过公钥进行加密这个随机数,传递给服务端,那这个随机数就是我们对称加密的**。

6、客户端发送 finish  表示握手完成

7、客户端和服务端可以通过生成的随机数进行对称加密传递数据了


总结



今天的内容基本到这里就结束了,这里面还有一个比较重要的加密算法笔者还没有研究透彻,那就是 RSA 加密算法,等笔者研究透着了在给大家分享,最后附上我们 http 的返回码对应的是什么情况:





http/https 访问返回的 conde:2XX成功、3XX重定向、4XX客户端/请求错误、5XX服务器错误等
201创建 202 接受 203 非授权信息 204无内容 205重置内容 206部分内容
301url被更新 302临时重定向
400错误请求 401未经授权 。 402需要支付 。 403禁止 。 405不可请求的方法 406 不接受
407需要代理 。 408超时 。 413请求实体太大了 。
503服务不可用 。 505不支持 http协议