TLS单向认证和双向认证问题.md

2023/11/20 与技术部王林对话

主题

商城和总控之间有授权同步等 API 访问,通信机制上使用什么协议实现,https 单向认证还是双向认证?

重点

  • 技术部认为自建 CA 维护成本高
  • 双向 TLS 认证过重,安全性不需要那么强,因为里面的信息对黑客来说价值并不大
  • 使用软件的算法进行身份认证等协商工作,而不是证书
  • 技术部认为在总控软件下面的硬件是受信的
  • (有单向认证到双向认证会面临兼容性问题)

结论

后续采用 TLS 单向认证即可,商城这边需要总控方面提供什么信息,后面通过软件算法协商即可。

可能的争议点

下面结合石犀软件部署场景进行分析。目前总控部署模式为客户本地部署,客户拥有机器 root 权限,并且有绝对的网络优势位置,威胁场景:客户知道如何采用中间人攻击,并想要获取商城与总控通信时的信息。

问题点

  • 商城提供给总控的 API 是否涉密?

  • 商城提供给总控的 API 泄露后是否会导致严重后果?

论点

TLS 单向认证在石犀软件部署场景下不能抵抗住中间人攻击。而 TLS 双向认证是可以抵抗的。

TLS 双向认证降级为单向认证实现简单,而单向认证想要升级双向认证不好做兼容。

附录

  1. TLS 双向认证

    • 优势

      • 增强的安全性:不仅服务器需要提供有效的证书来证明其身份,客户端也需要做同样的事情,从而增加了安全性。
      • 减少中间人攻击的风险:因为双方都需要验证身份,这大大降低了中间人攻击的可能性。
      • 身份确认:可以确保与预期的客户端进行通信,对于高安全要求的应用尤其重要。
    • 劣势

      • 部署复杂:需要为每个客户端生成和管理证书,这可能会导致部署和维护上的复杂性。
      • 性能开销:双向认证可能会带来额外的性能开销,尤其是在高并发环境中。
      • 管理成本:证书的续期、撤销和更新可能导致额外的管理成本。
  2. TLS 单向认证

    • 优势

      • 简单易部署:只需要服务器有证书,客户端不需要,简化了部署过程。
      • 安全:客户端可以验证服务器的身份,确保与预期的服务器通信。
    • 劣势

      • 安全性较低:只能验证服务器的身份,无法验证客户端的身份,可能会面临其他安全风险。
  3. 基于 API 密钥的认证

    • 优势

      • 部署简单:通常只需生成一个 API 密钥并在请求中发送。
      • 跨平台:API 密钥可以在多种平台和语言中使用,不受特定的协议或库的限制。
    • 劣势

      • 较低的安全性:如果密钥被泄露,任何人都可以使用该密钥。
      • 无状态验证:无法验证请求来源的身份,只能验证请求是否包含有效的 API 密钥。
  4. 基于 token 的认证(如 JWT)

    • 优势

      • 状态无关:服务器不需要存储任何关于客户端的会话信息。
      • 灵活性:Token 可以包含多种信息,并且可以轻松地跨多个服务进行验证。
    • 劣势

      • 安全风险:如果 Token 被截获,攻击者可以冒充用户。
      • 生命周期管理:需要一个机制来撤销或刷新 Token。

TLS 单向认证威胁模型

重点

TLS 单向认证主要威胁来自于一个假设,客户拿到了其中一台总控,并试图采用中间人攻击思路来对 商城给总控提供的 API。

攻击步骤

  1. 在拥有客户端主机的 root 权限的情况下,黑客可以部署特定的应用程序来拦截客户端和服务器之间的通信,并伪装成服务端与客户端建立连接。

    步骤 1: 拦截网络流量

    1. 安装网络监控工具:使用像 Wireshark Tcpdump 这样的网络监控工具来捕获和分析经过该主机的网络流量。
    2. 配置端口镜像:如果可能,配置网络设备进行端口镜像(也称为 SPAN),将目标服务器的流量复制到监控的端口。

    步骤 2: 伪装成服务器

    1. DNS 欺骗:通过修改本地 DNS 设置或使用像 DNSChef 这样的工具,将目标服务器的域名解析到一个由黑客控制的 IP 地址上。
    2. 建立伪造服务器:使用像 Apache、Nginx 或自定义服务器软件,在黑客控制的机器上设置一个伪造的服务器。

    步骤 3: 中间人攻击

    1. TLS 拦截代理:设置一个 TLS 拦截代理(如 mitmproxy),用于解密和重新加密传输的数据。
    2. 生成和使用证书:使用自签名证书或通过某种方式获取的合法证书来伪装成目标服务器。
    3. 转发请求:接收来自客户端的请求,解密数据,可以选择性地修改,然后将其加密并转发到真正的服务器。

    步骤 4: 伪装和响应客户端

    1. 接收服务器响应:接收来自服务器的响应,解密数据。
    2. 响应客户端:将响应数据加密并发送回客户端。客户端会认为数据是直接来自目标服务器。

    步骤 5: 维护连接

    1. 会话管理:维护与客户端和服务器的会话状态,确保持续的通信。
    2. 数据记录:可选地记录经过的数据,以供后续分析。

TLS单向认证和双向认证问题.md
https://abrance.github.io/2023/09/10/mdstorage/project/sr/TLS单向认证和双向认证问题讨论/
Author
xiaoy
Posted on
September 10, 2023
Licensed under