HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层
HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况
比如臭名昭著的 “运营商劫持”
由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器, 交换机等), 那么运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改.
点击 “下载按钮”, 其实就是在给服务器发送了一个 HTTP 请求, 获取到的 HTTP 响应其实就包含了该 APP 的下载链接. 运营商劫持之后, 就发现这个请求是要下载天天动听, 那么就自动的把交给用户的响应给篡改成 “QQ浏览器” 的下载地址了
加密就是把 明文 (要传输的信息)进行一系列变换, 生成 密文
解密就是把 密文 再进行一系列变换, 还原成 明文
在这个加密和解密的过程中, 往往需要一个或者多个中间的数据, 辅助进行这个过程, 这样的数据称为 密钥
既然要保证数据安全, 就需要进行 “加密”.
网络传输中不再直接传输明文了, 而是加密之后的 “密文”.
加密的方式有很多, 但是整体可以分成两大类: 对称加密 和 非对称加密
问题:客户端生成的密钥key要发给服务器,服务器才能解密,如果被黑客截获了key,黑客就成功入侵并可以篡改数据
如何让密钥key无法被黑客获取?
客户端生成一个对称私钥key,服务器生成一个公钥pub和一个私钥pri
问题:有可能客户端最开始获取的公钥是黑客截获后伪造的!
黑客伪造公钥
问题:防护中间人攻击的最关键问题就是客户端如何信任公钥?
在客户端和服务器刚一建立连接的时候, 服务器给客户端返回一个 证书.
这个证书包含了刚才的公钥, 也包含了网站的身份信息
证书可以理解成是一个结构化的字符串, 里面包含了以下信息: