HTTPS的工作过程
引入对称加密
对称加密其实就是通过同一个 "密钥" , 把明文加密成密文, 并且也能把密文解密成明文.
引入对称加密之后, 即使数据被截获, 由于黑客不知道密钥是啥, 因此就无法进行解密, 也就不知道请求的真实内容是啥了
但事情没这么简单. 服务器同一时刻其实是给很多客户端提供服务的. 这么多客户端, 每个人用的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了, 黑客就也能拿到了). 因此服务器就需要维护每个客户端和每个密钥之间的关联关系, 这也是个很麻烦的事情
比例理想的做法:就是在客户端和服务器建立连接的时候,双方协商这次的密钥是啥
但是如果直接把密钥明文传输, 那么黑客也就能获得密钥了~~ 此时后续的加密操作就形同虚设了.
所以要给密钥加密,但密钥给密钥对称加密,哪里是个头啊!有可能所有加密的密钥都被黑客获取了,这递归加密就形同虚设了,这时就要用到非对称加密了
引入非对称加密
非对称加密要用到两个密钥, 一个叫做 "公钥", 一个叫做 "私钥"
公钥和私钥是配对的. 最大的缺点就是运算速度非常慢,比对称加密要慢很多.因此大部分情况是对要传输数据进行对称加密的密钥进行非对称加密或解密
- 通过公钥对明文加密, 变成密文
- 通过私钥对密文解密, 变成明文
也可以反着用
- 通过私钥对明文加密, 变成密文
- 通过公钥对密文解密, 变成明文
- 客户端在本地生成对称密钥, 通过公钥加密, 发送给服务器.
- 由于中间的网络设备没有私钥, 即使截获了数据, 也无法还原出内部的原文, 也就无法获取到对称密钥
- 服务器通过私钥解密, 还原出客户端发送的对称密钥. 并且使用这个对称密钥加密给客户端返回的响应数据.
- 后续客户端和服务器的通信都只用对称加密即可. 由于该密钥只有客户端和服务器两个主机知道, 其他主机/设备不知道密钥即使截获数据也没有意义.
这时又面临一个问题
引入证书
证书 可以理解成是一个结构化的字符串, 里面包含了以下信息:
- 网站域名
- 证书发布机构
- 证书有效期
- 公钥
- 证书所有者
- 数字签名
- ......