如何使用libsrtp或类似的库对WebRTC数据流进行解密/加密? [英] How to use libsrtp or similar library to decrypt/encrypt the WebRTC data stream?

查看:42
本文介绍了如何使用libsrtp或类似的库对WebRTC数据流进行解密/加密?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个服务器,它从Web浏览器接收WebRTC会话的报价、答案和候选人,并传递给它的对等方。稍后还会从同一服务器传递数据。

现在,为了实现我们自己的类似SFU的机制,我在考虑是否可以将此数据解密为实际的原始字节,然后使用它们自己的加密将其传递给多个对等体。为此,我考虑使用开源libsrtp库。这里是它的example code
主要有srtp_protect()加密和srtp_unprotect()解密两个函数。

问题:如何将此库与上述WebRTC SDP标头(即Offer、Answer、Candidate)结合使用,以获取原始RTP字节&&再次加密?

[注意:其他开源解决方案,如";MediaSoup";、";Janus";等不在本帖子的讨论范围内。]

WebRTC

如果您有录取通知、答案和候选人,您就有足够的信息来建立推荐答案会话。在担心加密/解密之前,您需要建立ICE Connectivity

对于ICE,您需要每个代理的用户片段和密码。您可以通过Offer/Answer交换这些值。我会从ice-lite开始。您需要接受STUN请求数据包,断言用户片段是正确的,并且使用密码签名。然后,您用STUN响应响应您的用户片段,并用您的密码签名。正在向您发送通信的IP/端口是远程对等方。

对于C/C++,我建议使用libjuicelibnice。这也是你可以自己写的东西!如果有帮助,我很乐意在我的答案中添加更多关于这两个实现的详细信息。

接下来,您需要建立一个DTLS Session。你需要了解双方的角色。在提供/应答中,每一方都将声明setup:active用于客户端,setup:passive用于服务器,或者setup:actpass(如果它将选择推迟到另一方)。了解详细信息后,就可以开始握手了。

有关进行DTLS握手、提取密钥材料等的示例,请参阅dtls.c。重要的部分是正确设置您的角色,并设置读/写BIOS。由于OpenSSL不能发送ICE,您需要自己将数据传入/传出OpenSSL。还要确保您验证了报价/答案中的证书指纹!

完成后,您可以通过此DTLS连接发送SCTP(DataChannels)。

如果要执行SRTP,您需要Export the Keying material,然后确定使用的密码套件。

使用此密钥材料+密码套件。您create the session然后您可以decrypt the packets

如果有帮助,我很乐意添加更多示例/更具体地谈论某些API。

这篇关于如何使用libsrtp或类似的库对WebRTC数据流进行解密/加密?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆