Skip to content

通俗理解 https

对称加密与非对称加密

  • 对称加密就是加密和解密时使用的是相同的秘钥,优点是速度快。缺点是双方的维护成本高。
  • 非对称加密就是加密和解密使用的是不同的秘钥,分别称之为公钥和私钥。公钥可以公开让所有人知道, 私钥要自己保存好。公钥可以用私钥解密,私钥可以用公钥解密。优点比较安全,缺点是速度慢。

如何结合 对称加密和非对称加密 优点进行通信。

  • 客户端随机生成一个秘钥 A,使用服务端的公钥加密后发送给服务端。
  • 服务端收到后,用自己的私钥进行解密获得 A。并告诉客户端已经获得了 A。
  • 后面客户端和服务端通行。

问题出现

客户端如何获取服务端的公钥? 服务端的公钥如果直接由 服务端返回客户端 容易被第三者劫持。如何保证服务端的公钥 真的就是服务端的公钥? 这个需要有机构来证明 这个公钥是对的。

如何解决

服务端通过回传 数字证书(由 证书和数字签名组成)来解决问题。

1. 证书

通过向 CA(证书颁发机构) 申请获得,包含以下内容:

  • 服务端的域名、证书的有效期等
  • 服务端的公钥,注意这个是对外公开的。
  • hash 算法,注意这个也是公开的

2. 数字签名

CA 使用证书的hash 算法对证书的内容 做一次 hash,得到哈希值,然后用CA 的私钥进行加密。

3. 数字证书

将数字签名和证书放在一起,就是数字证书;

4. 浏览器处理

  • 当客户端收到这个证书数字签名以后, 首先浏览器根据预装的一些 CA 的证书,找到对应的证书的CA 公钥,然后用CA 公钥数字签名进行解密,得到哈希值 B,再用证书的 hash 算法对证书内容做一次 hash,得到哈希值 A,然后对比 A === B,如果一致说明证书有效。
  • 同时还查看证书是否在有效期内。
  • 若验证通过,则说明这个公钥有效
  • 然后客户端随机生成对称密钥 R, 用服务端的安全公钥对 R 进行加密,发送给服务端。
  • 服务端用自己的私钥解密,得到对称密钥 R
  • 随后双方发送的内容,使用对称密钥 R进行加密和解密通信内容。

image

5. 反向说明

  1. 服务端和客户端都使用"客户端"的生成的随机 "对称密钥 R"进行加密和解密,从而进行内容传输;
  2. 服务端如何获取客户端对称密钥 R? 客户端会使用服务端的公钥对 R 进行加密, 服务端用自己的私钥进行解密, 从而获得 R;
  3. 客户端如何验证服务端的公钥 就是服务端的,而没有被人劫持掉; 这个就涉及到数字签名;