https://segmentfault.com/a/1190000019976390

    1. 客户端请求服务器获取证书公钥
    2. 客户端(SSL/TLS)解析证书(无效会弹出警告)
    3. 生成随机值
    4. 用公钥加密随机值生成密钥
    5. 客户端将秘钥发送给服务器
    6. 服务端用私钥解密秘钥得到随机值
    7. 将信息和随机值混合在一起进行对称加密
    8. 将加密的内容发送给客户端
    9. 客户端用秘钥解密信息

    image.png

    加密过程使用了对称加密和非对称加密。

    • 对称加密:客户端和服务端采用相同的密钥进行加密
      1. encrypt(明文,秘钥) = 密文
      2. decrypt(密文,秘钥) = 明文
      非对称加密:客户端通过公钥加密。服务端通过私钥解密
      1. encrypt(明文,公钥) = 密文
      2. decrypt(密文,私钥) = 明文

    非对称加密加解密秘钥,对称加密传输内容

    因为 TLS 握手的过程中采用了非对称加密,客户端本身不知道服务器的秘钥,这样通信就不会被中间人劫持。此外这一步服务端还提供了证书,并且可能要求客户端提供证书。关于证书下文会提到,只要有了证书,就能保证和你通信的对方是真实的,而不是别人伪造的。