HTTPS 图文解析

开篇

在前端面试博弈过程中经常会被问到https、ssl相关内容,我们对比总结一下。

在http协议中可能存在信息窃听或者身份伪装的安全问题,使用https可以通信机制可以有效的防止这些问题。

https = http + ssl

背景

http 和 https的区别

http的缺点

  • 使用明文通信,内容可能会被窃听,并且随意篡改
  • 不验证通信双方身份,有可能遭遇伪装
  • 无法证明报文的完整性,内容可能遭到篡改
HTTP + 加密 + 认证 + 完整性保护 = HTTPS

HTTPS 是身披SSL外壳的HTTP

https有以下特性

  • TLS/SSL 内容加密
  • 数字证书(CA) 验明身份,防止中间人攻击
  • MD5、SHA-1 等散列值方法防止信息篡改

加密方式

对称加密

数据加解密使用同一份密钥,加解密速度快,效率高,缺点是密钥的管理难度大,一旦密钥传输泄露,那就没啥用处了。

HTTPS 图文解析_第1张图片

所以解决办法就是下面的

非对称加密

使用一对非对称密钥。一把叫私有密钥,另一把叫公有密钥,私有密钥存储于服务器,公有密钥随意发送。也就是说,发送密文方使用对方的公有密钥进行加密,对方接受到信息后,使用私有密钥进行解密。再不使用私有密钥情况下很难还原信息。 HTTPS 图文解析_第2张图片

混合加密

HTTPS采用对称加密和公开密钥加密两者混合加密,两者都有各自的优点。对称加密处理速度快,但密钥无法安全发送给对方;非对称加密处理速度慢,但密钥能够安全交换。 但如果我们将两种加密方式一起使用,则两种加密方式就能互补。也就是说,利用非对称加密方式安全地交换在共享密钥加密中要使用的密钥,在确保密钥安全前提下,使用对称加密方式进行通信

HTTPS 图文解析_第3张图片

SSL证书

数字证书的一种,遵循SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能,我常用的是 DigiCert 免费版,有效期只有一年。长期的证书还是很贵的。

正文内容

SSL 握手过程

开始加密通信之前,客户端和服务器首先必须建立连接和交换参数,这个过程叫做握手(handshake)。如图:

HTTPS 图文解析_第4张图片

  • 第一步,爱丽丝给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。
  • 第二步,鲍勃确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)
  • 第三步,爱丽丝确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给鲍勃。
  • 第四步,鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret)。
  • 第五步,爱丽丝和鲍勃根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。

白话版本

1、客户端生成一个随机数,带着客户端所支持的加密方法List,传递给服务器端,自己的随机数先存着。

2、服务器接收到这个随机数,先存着,生成一个新的随机数,并从客户端传过来的加密方法List中选择一个最合适的加密方法,还有自己的数字证书(公钥),三个一并发送给客服端。

3、客户端确认数字证书有效,拿到随机数先存着,再生成一个新的随机数,然后用公钥加密这个随机数,生成一个 预主秘钥(Premaster secret),将预主秘钥发送给服务器端。 当前步骤中的预主秘钥是本次加密的关键,前2个随机数都是明文传送,当前这个使用公钥加密,所以不容易拿到,即使拿到也没有关系,因为只有服务器上的秘钥才能解析,才知道第三个随机数是什么。

4、服务器接收到预主秘钥之后,用私钥解密得到随机数。到此,客服端和服务器端都知道了三个 随机数。 用这个三个随机数生成 对话秘钥(session key),用来加密接下来的所有对话过程。

来张图就是这个样子:

HTTPS 图文解析_第5张图片

总结:HTTPS 使用的混合加密的方式来进行加密处理的。最重要的加密是第三个随机数的传输,以此来保证本次传输的安全性。

参考资料: http://www.ruanyifeng.com/blo...

你可能感兴趣的:(前端,javascript,html,html5,es6)