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