HTTPS
在HTTP上引入一个加密层
明文:实际意思
密文:对明文加密后不易理解
密钥
解密/加密的工具
对称加密:共用同一个密钥
非对称加密:两把密钥,客户端用公钥,服务器用私钥。
HTTPS公认的三大优势有:
- 数据加密,防窃听:HTTPS中的对称加密和非对称加密
- 身份验证,防冒充:HTTPS的CA和证书
- 完整性校验,防篡改:HTTPS的哈希
加密过程
主要是对header和body进行加密
1、引入对称加密
对称加密其实就是通过同一个 "密钥" , 把明文加密成密文, 并且也能把密文解密成明文。
对称加密是客户端和服务器使用同一个密钥,但有很多客户端,每个人用的秘钥都必须是不同的,服务器就需要维护每个客户端和每个密钥之间的关联关系。
如果客户端和服务器直接的密钥传输是明文的,那黑客就容易得到,从而知道明文数据了。
2、引入非对称加密
服务器生成一个公钥和私钥,公钥给客户端用来加密密钥。
公钥和私钥是配对的. 最大的缺点就是运算速度非常慢,比对称加密要慢很多.
意义:
-
客户端在本地生成对称密钥, 通过公钥加密, 发送给服务器.
-
由于中间的网络设备没有私钥, 即使截获了数据, 也无法还原出内部的原文, 也就无法获取到对称密钥
-
服务器通过私钥解密, 还原出客户端发送的对称密钥. 并且使用这个对称密钥加密给客户端返回的响应数据.
-
后续客户端和服务器的通信都只用对称加密即可. 由于该密钥只有客户端和服务器两个主机知道,其他主机/设备不知道密钥即使截获数据也没有意义
这样有一个缺点,因为客户端不知道返回的pub公钥是否是服务器生成的,黑客也可以自己生成一个公钥和私钥进行返回给客户端,从而获取明文数据。
3、引入证书
在客户端和服务器刚一建立连接的时候, 服务器给客户端返回一个 证书.
这个证书包含了刚才的公钥, 也包含了网站的身份信息.
这个 证书 可以理解成是一个结构化的字符串, 里面包含了以下信息:
- 证书发布机构
- 证书有效期
- 公钥
- 证书所有者
- 签名
- ......
当客户端拿到证书之后,会进行检验,查看证书是否伪造
- 判定证书的有效期是否过期
- 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).
- 验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2. 对比 hash1 和 hash2 是否相等.如果相等, 则说明证书是没有被篡改过的
有了引入证书之后,黑客就很难进行查看修改数据了,大大提升了数据安全性。
总结
HTTPS 工作过程中涉及到的密钥有三组
第一组(非对称加密): 用于校验证书是否被篡改. 服务器持有私钥(私钥在注册证书时获得), 客户端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器使用这个私钥对证书的签名进行加密. 客户端通过这个公钥解密获取到证书的签名, 从而校验证书内容是否是篡改过.
第二组(非对称加密): 用于协商生成对称加密的密钥. 服务器生成这组 私钥-公钥 对, 然后通过证书把公钥传递给客户端. 然后客户端用这个公钥给生成的对称加密的密钥加密, 传输给服务器, 服务器通过私钥解密获取到对称加密密钥.
第三组(对称加密): 客户端和服务器后续传输的数据都通过这个对称密钥加密解密