HTTPS小记

我们发现,现在很多的大型网站请求链接都是HTTPS的,比如说我们熟悉的天猫,京东,百度等等。那么它们为什么要使用HTTPS来请求自己的网站呢,想必大家都知道是因为HTTPS是安全的,而HTTP却不安全,所以它们都会用HTTPS来作为自己网站的请求头。今天,我们便来讲讲这HTTPS。

数据的安全性

加密算法:对称加密算法、非对称加密算法、HASH算法等

对称加密算法: Server和Client共用一把秘钥,Server用此秘钥加密数据,Client用此秘钥解密数据。
优缺点:优点是加密处理简单,加解密速度快,密钥较短,系统开销小,适合加密大量数据。 缺点是进行安全通信前需要以安全方式进行密钥交换,加密度低,且当Client的数量较多时就得维护大量的密钥,毕竟总不能让所有的Client共用一个密钥吧。
常见的对称加密算法:AES、DES、3DES等

非对称加密算法:需要两个密钥,一个是私钥,一个是公钥;Server拥有私钥,Client拥有公钥;Server可以通过私钥加密数据,然后Client通过公钥解密该数据,反之,Client也可以通过公钥加密数据,然后Server通过私钥解密该数据。
优缺点:算法强度复杂,安全性相较于对称加密算法更高,但是加解密速度低,所以仅适用于加密少量数据。
常见的非对称加密算法:RSA、Elgamal等。

HTTPS
为什么要采用HTTPS:目的是为了保护数据在传输过程中的隐私,因为使用HTTPS,在传输过程中是无法窥探到传输的明文数据的。

HTTPS的加密是基于SSL/TLS协议的,SSL/TLS协议的基本思路就是采用非对称加密算法,Client向Server索要公钥,然后用公钥加密数据,Server收到密文以后,用自己的私钥解密。

HTTPS同时使用了对称加密算法可非对称加密算法。

HTTPS引入了一个随机数的概念,使用随机数来生成对称加密算法,通过随机数就可以保证Server和Client每次交互时都是新的加密算法,只有在交互的那一刻才能确定加密算法。

接下来我们用图形来描述消息在传输过程中的安全性问题:

  1. 正常下Client向Server发送请求。
    HTTPS小记_第1张图片

  2. 这时我们如何保证数据的安全性呢?大家可能会先想到用一个秘钥来加密Client和Server之间传输的数据,这样钓鱼网站即使拦截到此条消息,在没有秘钥的情况下也无法窥探到明文数据的。
    HTTPS小记_第2张图片

  3. 正常情况下这样是没有问题的,但是新问题又来了,如果存在很多个Client呢,这种方法还适用嘛?答案当然是NO!为什么?这还用问嘛?如果你要让所有的Client共用一个秘钥的话,秘钥泄露的可能性将大大增大,且秘钥泄露后你也不知道是谁泄露的,到那时候所谓的加密就成为了笑话了。
    HTTPS小记_第3张图片

  4. 当然你也可以为每个客户端分配一个私钥。
    HTTPS小记_第4张图片

  5. 但是我们有没有更好的解决方法呢?这时,我们便想到了非对称加密算法,Server维护一个私钥,每个Client维护同一把公钥即可。
    HTTPS小记_第5张图片

  6. 可能你会觉得这样的话,如果所有的客户端共用同一把公钥的话,那么公钥便有泄露的风险,这时我们就使用多对公私钥来解决这个问题。
    HTTPS小记_第6张图片

在使用对称加密算法的时候,Client是如何获取公钥的呢?
获得公钥的过程
1. Server将公钥发送给每一个Client
2. Server将公钥放到一个远程服务器上,Client请求拿到(不可取,因为多了一次请求操作)

但是获取公钥的过程中却有可能会被中间人串改(因为Client在获取公钥的时候没有对Server的身份做一个识别),如图:
HTTPS小记_第7张图片

这时我们可以通过第三方机构的数字证书来保证Client获取公钥时不会被中间人串改,也就是CA认证(讲通俗点就是引入第三方机构的公钥来解决此问题)。
HTTPS小记_第8张图片
这样即使中间人获取到了数字证书,他也无法获取证书中的Server公钥,因为只有Client才能读取证书中的Server公钥(其实就是解密证书)。

我们可以把数字证书看成是学历证书,证书上有证书编号,毕业院校,毕业时间等信息,而第三方机构便是学信网,用来验证证书的真伪性。

HTTPS通信
在开始加密通信之前,客户端和服务器首先必须建立链接和交换参数,这个过程叫做握手。
四次握手:
1. 客户端向服务端发送加密通道请求,发送消息如下
a. 给出一个协议版本号(SSL/TLS)
b. 客户端生成的随机数(用于生成对话的秘钥)
c. 客户端支持的加密算法,如RSA
d. 支持的压缩算法
2. 服务端收到消息后,向客户端回应
a. 确认双方使用的加密通道协议版本号,如果浏览器版本和服务器支持的版本不一致,则关闭加密通道
b. 服务器生成的随机数(用于生成对话的秘钥)
c. 确认使用的加密算法
d. 服务器的数字证书
3. 客户端收到服务器回应后,验证证书是否有效(包括可信机构、证书域名、证书是否过期)。验证成功后,客户端会从证书中获取服务器的公钥,然后向服务器发送如下信息
a. 生成一个新的随机数,并使用数字证书中的公钥,加密这个随机数
b. 编码改变通知,协定双方的加密算法
c. 客户端握手结束通知
4. 服务端收到客户端的随机数后,计算生成本次的回话所用的“会话秘钥”,然后向客户端发送如下信息
a. 编码改变通知,协定双方的加密算法

后续的每次通信之前都是通过“会话秘钥”进行一个加密,而非每次通信都会有这么多复杂的过程。

你可能感兴趣的:(HTTPS小记)