谈谈 WebRTC TURN 身份验证

在 WebRTC 领域,TURN 服务器通常作为黑盒组件处理。我们需要它们,但不必定期进行配置。然而,17.7% 的 WebRTC 流量由 TURN 服务器处理。

什么是 TURN 服务器?

TURN 服务器充当具有网络限制的客户端的中继。

好了,我们知道 TURN 服务器的作用了,但 TURN 服务器并不认识客户端。因此,客户端应进行自我验证。怎么做呢?此外,我们还必须保持信息的完整性。TURN 服务器是如何处理的呢?在本文中,我们将尝试回答这些问题,并探索 TURN 验证的新方法。

长期身份验证

长期认证是一种传统的 “登录 “机制。说它传统,是因为用户名和密码在客户端成为用户或凭证有效之前都是持久的。

由于时间较长,重放保护无法通过时间限制来实现。为防止重放攻击,客户端必须完成摘要挑战。

谈谈 WebRTC TURN 身份验证
长期身份验证
  1. 客户端首先向服务器发送请求,不包括凭据或完整性检查。
  2. 服务器通过拒绝请求,并向客户端提供一个域(用于指导用户名和密码的选择)和一个 nonce。nonce 是服务器选择的唯一标记,经过编码后可显示其有效期或与特定客户端身份的关联。
  3. 然后,客户端重试请求,这次包括用户名、realm 和服务器提供的 nonce。客户端会对整个请求添加基于 HMAC 的信息完整性检查。
  4. 服务器将计算出的 HMAC 与接收到的值进行比较,从而验证 nonce 和信息完整性。如果计算出的 HMAC 与接收到的值相符,服务器就会验证请求。如果 nonce 不再有效,服务器就会将证书视为 “过期”,并拒绝请求,同时提供一个新的 nonce。

长期验证可能很方便。但是,它需要强大的安全措施来保护静态凭证。使用随机性至少为 128 位的密码,可减轻长期凭据机制对离线攻击的脆弱性。

REST API 身份验证

但长期来看存在多个问题:

  • TURN 密码必须保密。
  • TURN 密码容易受到离线字典攻击。
  • TURN 服务器必须查阅密码数据库来验证客户端。
  • TURN 用户名值以明文形式传递。它可以用于流量分析。

IETF草案解决了上述长期认证问题。不幸的是,草案已经过期。然而,这是一个有趣的提议。

该草案定义了一种 HTTP 服务,客户端通过 HTTP 请求获取短暂(有时间限制)的证书。

谈谈 WebRTC TURN 身份验证
REST API 身份验证

这意味着:

  • 凭证不再是秘密
  • 无法通过用户名识别
  • 密码是机器生成的,以防止字典攻击
  • 响应包含 TURN 服务器位置

摘要

目前可用的 TURN 服务器只支持长期身份验证机制。不过,我们可以看到社区正在体验新的身份验证方法。此外,如果你想了解更多有关 TURN 身份验证或 TURN 的信息,可以访问这些项目:

  • Pion TURN:Pion TURN 是一个用于构建 TURN 服务器和客户端的 Go 工具包。
  • STUNner:WebRTC 的 Kubernetes 媒体网关。此外,它还实现了用于 TURN 身份验证的 REST API。
  • coturn:coturn 是 TURN 和 STUN 服务器的免费开源实现。

作者:Ricsi

本文为原创稿件,版权归作者所有,如需转载,请注明出处:https://www.nxrte.com/jishu/webrtc/29399.html

(0)

相关推荐

发表回复

登录后才能评论