主题
通俗理解 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进行加密和解密通信内容。
5. 反向说明
- 服务端和客户端都使用"客户端"的生成的随机 "对称密钥 R"进行加密和解密,从而进行内容传输;
- 服务端如何获取客户端对称密钥 R? 客户端会使用服务端的公钥对 R 进行加密, 服务端用自己的私钥进行解密, 从而获得 R;
- 客户端如何验证服务端的公钥 就是服务端的,而没有被人劫持掉; 这个就涉及到数字签名;