寻找答案的地方是TURN提议标准,
RFC 5766。该标准提供了一种在客户端和对等方之间中继包含应用程序数据的UDP数据包的方法:
一旦创建了分配,客户端可以发送应用程序数据到服务器,并指示要将数据发送到哪个对等方,服务器将中继此数据到适当的对等方。客户端在TURN消息中向服务器发送应用程序数据;在服务器上,数据从TURN消息中提取并以UDP数据报的形式发送到对等方。反向方向上,对等方可以将应用程序数据作为UDP数据报发送到分配的中继传输地址;然后服务器将此数据封装在TURN消息中,并与发送数据的对等方的指示一起发送给客户端。
TURN解析的最高层是UDP层。它不理解或修改应用程序数据层(在您的情况下,是WebRTC协议)。标准说:
希望确保其数据未被更改或伪造的应用程序必须在应用程序级别上保护其数据的完整性。
这意味着您可以保护应用程序数据的完整性,并且TURN将不加修改地中继它。您还可以查看TURN协议的详细信息(我不会在此重复),显示它仅包装和转发应用程序数据。
最后,标准对窃听说:
通过TURN中继的应用程序数据的机密性最好由应用程序协议本身提供,因为在TLS上运行TURN不能保护服务器和对等方之间的应用程序数据的机密性。如果应用程序数据的机密性很重要,则应用程序应加密或以其他方式保护其数据。例如,对于实时媒体,可以使用SRTP提供机密性。
这个摘录中的建议是使用诸如DTLS-SRTP的协议加密应用程序数据来保护机密性,WebRTC也使用了这种协议。
因为TURN不解释或修改应用程序数据,所以它不会为WebRTC应用程序数据流量添加任何安全漏洞,这些漏洞在没有使用TURN的情况下也会存在。WebRTC数据在WebRTC端点之间进行加密。
现在没有人能保证TURN服务器无法访问密钥。一个恶意的TURN服务器可以像任何其他拦截网络数据包的人一样尝试对你的连接进行中间人攻击。只有使用TURN中继不会削弱WebRTC安全性这一点是正确的。
只要DTLS被正确实施和使用,并且假定DTLS算法和密码是安全的,那么WebRTC流量应该得到端到端的安全保障。使用任何基于SSL的方案的一部分需要验证另一个端点的证书,就像HTTPS一样。并且就像HTTPS一样,这将需要事先进行证书身份的线下交换或使用可信第三方。如果证书没有得到适当验证,那么MITM攻击的大门就会敞开(不仅是TURN服务器)。