加密传输之HTTPS

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 对黑客来说都是透明的。
  • 所以黑客只要诱导用户安装自己伪造的证书就可以,例如各种钓鱼的不可描述网站

推荐阅读

https 加密过程和 tls 证书验证