http 和 https
常规的 http 请求,所有信息明文传播,只要中间人在链路中的任意阶段进行劫持,就会带来三大风险:
- 窃听风险:第三方可以获取通信内容
- 篡改风险:第三方可以修改通信内容
- 冒充风险:第三方可以冒充他人身份参与通信
https 可以解决这些问题
https
http+TLS,TLS 是传输层加密协议,前身是 SSL 协议(1999 年应用广泛,然后标准化,改名就是 TLS,所以同一个东西的不同阶段)
SSL/TLS 协议是为了解决 http 的三大风险而设计的,希望达到:
- 内容加密:所有信息不再明文传播,都是加密的,第三方无法窃听
- 数据完整性:防止内容被第三方冒充或者篡改。具有校验机制,一旦被篡改,通信双方会立刻发现。
- 身份认证:配备身份证书,防止身份被冒充。即使被 DNS 劫持到了第三方站点,也会提醒用户有可能被劫持。
DNS 劫持
又叫域名劫持
- 是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名
深入理解 http 请求,dns 劫持与解析
dns 劫持和 http 劫持的区别
https 流程
- 客户端发起 https 请求
- 服务端的配置
- 一般需要向权威机构申请一个证书(也可以自己制作,这个会在之后的中间人攻击中讲到,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会提示),证书会生成 RSA 加密使用的一对公钥 A 和私钥 B
- 传送证书
- 这个证书主要内容是公钥 A,也包含了其他信息,如证书的颁发机构,过期时间等等
- 客户端解析证书
- 由客户端的 TLS 来完成的,主要是验证公钥 A 是否有效,比如颁发机构,过期时间等等,如果发现异常就会弹出一个警告框,提示证书有问题
- 如果证书没有问题,那么就生成一个随机值(秘钥 D)。之后就进入了不对称加密(RSA)的过程,用证书对该随机值加密(秘钥 D),生成私钥 C
- 传送加密信息
- 这部分传送的是用证书加密后的随机值(私钥 C)
- 服务端解密信息
- 服务端私钥 B 解密私钥 C 后,得到客户端传过来的秘钥 D,到此 RSA 非对称加密的过程结束,后续所有的数据都可以用私钥 D,进行对称加密和解密
- 传输加密后的信息
- 服务端用秘钥 D 加密信息
- 客户端解密信息
- 客户端用之前生成的私钥 D 解密服务端传过来的信息,于是获取到了解密后的内容
中间人攻击
https 信息的安全完全建立在证书可信的基础上,如果中间人伪造证书怎么办?
- 黑客自己伪造的证书需要通过客户端验证通过,才可以继续访问,只要客户端验证通过,那么公钥 A,私钥 B,私钥 C 对黑客来说都是透明的。
- 所以黑客只要诱导用户安装自己伪造的证书就可以,例如各种钓鱼的不可描述网站