HTTPS的安全通信机制

1. HTTPS概述

HTTPS(超文本传输安全协议),并非是应用层的一种新协议,只是HTTP通信接口部分用SSL和TLS协议代替而已。通常,HTTP直接和TCP通信。而当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。简言之,所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP。

屏幕快照 2020-11-02 上午9.55.33

在采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。

2. 对称加密

img

对称加密算法的加密和解密都是同一个**

客户端发送**至服务器,服务器接受该**,之后所有的数据传输都采用该**进行加密和解密。

该方法虽然可以解决明文传输的问题,却存在安全隐患。在**协商阶段,客户端需要发送**给服务器,此时如果攻击者监测到该**,就可以使用该**来解密之后所有的数据,那么本次经对称加密后的数据传输也就变为明文传输。

因此,如何确保对称加密方式中**的安全是此方式中最为核心的问题。

3. 非对称加密

img

非对称加密算法需要一组**对,分别是公钥私钥,这两个**是成对出现的。公钥加密的内容需要对应的私钥解密,私钥加密的内容需要对应的公钥解密

私钥由服务器自己保存,公钥发送给客户端。客户端拿到公钥后可以对请求进行加密后发送给服务端,这时候就算中间被截获,没有私钥也无法解密发送的内容,这样确保了客户端发送到服务端数据的安全

但是,采用非对称加密的方式只能保证客户端到服务器的数据是安全的,并不能保证服务器到客户端也是安全的,因此只是一种单向安全的加密方式

4. 混合加密

混合加密算法采用非对称加密+对称加密结合的方式,即通信双方所有的数据传输采用对称加密**传输采用非对称加密

服务器生成公钥和私钥,并将公钥发给客户端;客户端生成对称加密的**,用公钥对该**进行加密,并发给服务器,之后所有的数据传输都使用该**进行加密;服务器收到该客户端发过来的经公钥加密的数据,使用私钥对其解密,从而得到客户端的**,之后所有来自该客户端的数据,都使用该**解密。

img

混合加密的方式在一定程度上确实能提高数据传输的安全性,但是存在中间人攻击

img

因此,对于混合加密方式核心的问题在于确认公钥是否来源于货真价实的服务器

为了解决上述问题,可以使用由CA机构(Certificate Authority,数字证书认证机构)和其相关机关颁发的数字证书

5. 数字证书

数字证书包含明文和数字签名两部分

明文包括

  • 证书的版本信息
  • 证书的***
  • 证书所使用的签名算法(Hash算法)
  • 证书的发行机构名称
  • 证书的有效期
  • 证书所有人的名称
  • 证书所有人的公开**

数字签名的制作过程

  1. CA拥有非对称加密的私钥和公钥

  2. CA对证书内容进行hash得到信息摘要,即hash值。

    制作数字签名时为什么需要hash一次?

    最显然的是性能问题,非对称加密效率较差,证书信息一般较长,比较耗时。而hash后得到的是固定长度的信息,这样加密解密就会快很多。

  3. 对hash后的值用私钥加密,得到数字签名

img

浏览器的验证过程

  1. 拿到证书,得到明文T1,数字签名S1
  2. 验证明文的合法性
    • 验证域名、有效期等信息是否正确
    • 判断证书来源是否合法。每份签发证书都可以根据验证链查找到对应的根证书,操作系统、浏览器会在本地存储CA机构的根证书,利用本地根证书可以对对应机构签发证书完成来源验证
  3. 验证证书是否被篡改
    • 用CA机构的公钥对S1解密(由于是浏览器信任的机构,所以浏览器保有它的公钥),得到S2
    • 用证书里说明的Hash算法对明文T1进行hash得到T2
    • 比较S2是否等于T2,等于则表明证书可信

6. HTTPS工作原理

屏幕快照 2020-11-02 上午11.51.04

建立SSL连接

  1. 客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本加密组件列表(所使用的加密算法及**长度等)

  2. 服务器可进行SSL通信时,会以Server Hello 报文作为应答。和客户端一样,在报文中包含SSL版本和加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的

  3. 之后服务器发送Certificate报文,报文中包含公开**证书,即数字证书

  4. 最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束

  5. 客户端的TLS解析数字证书,确认证书的有效性,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,就生成一个被称为Pre-master secret的随机密码串(**)

  6. SSL第一次握手结束后,客户端以Client Key Exchange报文作为响应。报文中包含通信加密中使用的随机密码串(**)。该报文已用步骤3的公钥加密

  7. 接着客户端继续发送 Change Cigher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret**加密

  8. 客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手是否能够成功,要以服务器是否能够正确揭秘该报文作为判定标准

  9. 服务器同样发送Finished 报文

  10. 服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到SSL的保护。从此开始进行应用层协议,即发送HTTP请求

传输数据
11. 应用层协议通信,即发送HTTP响应

  1. 最后由客户端断开连接。断开连接时,发送close_notify报文。