前言
1. 不安全的 HTTP
通信使用明文(不加密),内容可能被「窃听」 不验证通信对方的身份,因此有可能遭遇「伪装」 无法证明报文的完整性,所以有可能被「篡改」
① 内容被窃听
② 身份被伪装
③ 报文被篡改
2. 安全的 HTTPS
① 加密
共享密钥加密
公开密钥加密
首先,网站服务器持有一组公钥和私有,它会把自己的公钥明文传输给客户端 客户端利用这个公钥给自己的消息进行加密,然后传输给服务器,这时候就算被攻击者截获,由于攻击者没有对应的私钥也无法解密该内容 网站服务器收到后,使用这个公钥对应的私钥进行解密
混合加密方式
某网站服务器拥有一组用于公开密钥加密的非对称密钥:公钥 A1、私钥 A2 浏览器向网站服务器请求,服务器把公钥 A1 明文给传输浏览器 接收到这把公钥 A1 后,浏览器随机生成一个用于共享密钥加密(对称加密)的密钥 X,用公钥 A1 加密后传给服务器。这个阶段,即便被攻击者截获,由于攻击者没有对应的私钥也无法解密该内容 服务器拿到后用对应的私钥 A2 解密得到密钥 X(以上这些阶段就是公开密钥加密) 这样双方就都拥有密钥 X 了,且别人无法知道它。之后双方之间所有的数据传输都使用密钥 X 进行加密和解密即可(这个阶段就是共享密钥加密)
② 数字证书
某网站服务器拥有一组用于公开密钥加密的非对称密钥:公钥 A1、私钥 A2 浏览器向网站服务器请求,服务器把公钥 A1 明文给传输浏览器 攻击者劫持到公钥 A1,保存下来,把数据包中的公钥 A1 替换成自己伪造的公钥 B1(它当然也拥有公钥 B1 对应的私钥 B2) 浏览器随机生成一个用于对称加密的密钥 X,用攻击者的公钥 B1(服务器此时不知道自己的公钥被替换了)加密后传给服务器 攻击者劫持后用自己的私钥 B2 解密就得到了密钥 X。然后再用服务器的公钥 A1 加密后传给服务器 服务器接收到攻击者用公钥 A1 加密的信息后,用对应的私钥 A2 解密得到密钥 X
③ 数字签名
认证服务器的公开密钥的是真实有效的数字证书认证机构 服务器的公开密钥是值得信赖的
CA 拥有非对称加密的私钥和公钥 网站申请数字证书,并发送自己的公开密钥 A CA 对网站的公开密钥 A 进行 Hash 得到摘录信息 MIC 对 MIC 值用 CA 的私钥加密,继而得到数字签名 将数字签名和网站的公开密钥 A 放进数字证书发放给网站
浏览器客户端接收到网站服务器发来的数字证书,得到网站的公钥 A 和数字签名 S1 浏览器使用事先植入的 CA 机构的公钥对 S1 进行解密,得到 S2 用数字证书里说明的 Hash 算法对网站的公钥 A 进行 Hash 得到 A2。 比较 S2 是否等于 A2,若相等则表示证书可信。于是浏览器就可以放心的取出数字证书中的网站公钥 A 进行使用
3. 为什么 HTTPS 没有被全面采用
首先,大部分选课系统基本都需要校园网或者 VPN 才能够登录,不需要考虑被外界攻击或者信息泄露问题 其次,即便使用的是 HTTP,选课系统开放的初期猛量的高并发尚且会让服务器崩溃,就甭说 HTTPS 了
有道无术,术可成;有术无道,止于术
欢迎大家关注Java之道公众号
好文章,我在看❤️