https       

https

HTTP+ 加密 + 认证 + 完整性保护 =HTTPS

http:

(1) 窃听风险(eavesdropping):第三方可以获知通信内容。

(2) 篡改风险(tampering):第三方可以修改通信内容。

(3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。

https:

(1) 所有信息都是加密传播,第三方无法窃听。

(2) 具有校验机制,一旦被篡改,通信双方会立刻发现。

(3) 配备身份证书,防止身份被冒充。

SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

image-20200619103934691

  1. 客户端告知服务端自己支持的密码套件(比如 TLS_RSA_WITH_AES_256_GCM_SHA384,其中 RSA 是密钥交换的方式,AES_256_GCM 是加密算法,SHA384 是消息验证摘要算法),提供客户端随机数。
  2. 服务端应答选择的密码套件,提供服务端随机数。
  3. 服务端发送 CA 证书给客户端,客户端验证 CA 证书。
  4. 客户端生成 PreMasterKey,并使用非对称加密 + 公钥加密 PreMasterKey。
  5. 客户端把加密后的 PreMasterKey 传给服务端。
  6. 服务端使用非对称加密 + 私钥解密得到 PreMasterKey,并使用 PreMasterKey+ 两个随机数,生成 MasterKey。
  7. 客户端也使用 PreMasterKey+ 两个随机数生成 MasterKey。
  8. 客户端告知服务端之后将进行加密传输。
  9. 客户端使用 MasterKey 配合对称加密算法,进行对称加密测试。
  10. 服务端也使用 MasterKey 配合对称加密算法,进行对称加密测试。

客户端验证CA证书

  1. 从服务端拿到的 CA 证书是用户证书,我们需要通过证书中的签发人信息找到上级中间证书,再往上找到根证书。

  2. 根证书只有为数不多的权威机构才能生成,一般预置在 OS 中,根本无法伪造。

  3. 找到根证书后,提取其公钥来验证中间证书的签名,判断其权威性。

  4. 最后再拿到中间证书的公钥,验证用户证书的签名。

    这,就验证了用户证书的合法性,然后再校验其有效期、域名等信息进一步验证有效性。

TLS 通过巧妙的流程和算法搭配解决了传输安全问题:使用对称加密加密数据,使用非对称加密算法确保密钥无法被中间人解密;使用 CA 证书链认证,确保中间人无法伪造自己的证书和公钥