webrtc协议_webrtc音频系列——6、WebRTC 数据安全机制

我们假设一个场景, A 与 B 通信,但此时 B 并不是真正的 B ,而是冒充的,这样 A 与 B 通信时,冒充的 B 就获得了 A 的重要信息。其实这种情况更多发生在会议系统或在线教育的小班课中,此时会议中有多人进行互动,如果黑客进入了会议中,他只需听别人说话,自己不发言,这样就将关键的信息窃取走了。所以现在的问题又来了,我们该如何辨别对方的身份是否合法呢

了解https协议的人都知道,https是通过非对称加密数字签名数字证书来确保数据传输的安全,这其实是SSL协议的一部分,在webrtc中也会采用类似SSL的机制来保证数据安全。这就是了DTLS。

我们先来看一下,webrtc是如何识别双方身份的。

它首先通过信令服务器交换 SDP,SDP 信息中包括了以下几个重要信息:

...
a=ice-ufrag:khLS
a=ice-pwd:cxLzteJaJBou3DspNaPsJhlQ
a=fingerprint:sha-256 FA:14:42:3B:C7:97:1B:E8:AE:0C2:71:03:05:05:16:8F:B9:C7:98:E9:60:43:
...

SDP 交换完成后,A 与 B 都获取到了对方的 ice-ufrag、ice-pwd 和 fingerprint 信息,有了这些信息后,就可验证对方是否是一个合法用户了。

其中, ice-ufrag 和 ice-pwd 是用户名和密码。当 A 与 B 建立连接时,A 每次发送数据到B,都要带着它的用户名和密码过来,此时 B 端就可以通过验证 A 带来的用户名和密码与 SDP 中的用户名和密码是否一致的,来判断 A 是否是一个合法用户了。

除此之外,fingerprint也是验证合法性的关键一步,它是存放公钥证书的指纹(或叫信息摘要),在通过 ice-ufrag 和 ice-pwd 验证用户的合法性之余,还要对它发送的证书做验证,看看证书在传输的过程中是否被窜改了。

8eae695e72ce182816e762b84a0fe4c4.png

从这张图中你可以看到, A 与 B 在传输数据之前,需要经历如下几个步骤。

  • 首先通过信令服务器交换 SDP 信息,也就是进行媒体协商。在 SDP 中记录了用户的用户名、密码和指纹,有了这些信息就可以对用户的身份进行确认了。
  • 然后就是双方通过 STUNTURN 协议获得自己的host、srflx 和 relay,交换candidate,这样双方才能建立连接。但是在语言视频直播中,客户端B一般是流媒体服务器,所以客户端A发一个STUN request ,服务端B响应一个STUN response,双方就可以建立连接了,但是发送STUN 消息的时候要带上用户名和密码。如果 STUN 消息中的用户名和密码与交换的 SDP 中的用户名和密码一致,则说明是合法用户。
  • A、B建立连接后,则需要进行 DTLS 协商(协商过程下面会讲),交换公钥证书并协商密码相关的信息。同时还要通过 fingerprint 对证书进行验证,确认其没有在传输中被窜改。
  • 最后,再使用协商后的密码信息和公钥对数据进行加密,开始传输音视频数据。

以上就是 WebRTC 保证数据安全的整套机制。

WebRTC 是通过使用 DTLS、SRTP 等几个协议的结合来达到数据安全的,那接下来我们就来分别看一下这几个协议是如何实现的。

DTLS协议

说到网络上的数据安全你可能首先想到的是 HTTPS, HTTPS 可以简单理解为“HTTP 协议 + SSL数据加密”,当然实际上它要复杂得多。HTTPS 的底层最初是使用 SSL协议对数据加密。当 SSL 更新到 3.0 时,IETF 对 SSL 3.0 进行了标准化,并增加了一些新的功能,不过基本与 SSL 3.0 没什么区别,标准化后的 SSL 更名为 TLS 1.0,所以可以说 TLS 1.0 就是 SSL 的 3.1 版本。

由于 TLS 底层是基于 TCP 协议的,而 WebRTC 音视频数据的传输主要基于 UDP 协议,因此 WebRTC 对数据的保护无法直接使用 TLS 协议。但 TLS 协议在数据安全方面做得确实非常完善,所以人们就想到是否可以将 TLS 协议移植到 UDP 协议上呢? 因此 DTLS 就应运而生了。

所以你可以认为DTLS 就是运行在 UDP 协议之上的简化版本的 TLS,它使用的安全机制与 TLS 几乎一模一样。

在 WebRTC 中为了更有效地保护音视频数据,所以需要使用 DTLS 协议交换公钥证书,并确认使用的密码算法,这个过程在 DTLS 协议中称为握手协议

1c6dc01b00ed6c548af8f036e7267b34.png

DTLS 的握手过程如下:

  • 首先 DTLS 协议采用 C/S 模式进行通信,其中发起请求的一端为客户端,接收请求的为服务端。
  • 客户端向服务端发送 ClientHello 消息,服务端收到请求后,回 ServerHello 消息,并将自己的证书发送给客户端,同时请求客户端证书。
  • 客户端收到证书后,将自己的证书发给服务端,并让服务端确认加密算法。
  • 服务端确认加密算法后,发送 Finished 消息,至此握手结束。

DTLS解决的问题

  • 交换密钥
  • 约定使用的加密算法

(DTLS不解决加密、解密的问题 , 加密解密的问题是通过 SRTP/SRTCP 协议解决的)

SRTP/SRTCP 协议

RTP/RTCP 协议并没有对它的负载数据进行任何保护。因此,如果你通过抓包工具,如 Wireshark,将音视频数据抓取到后,通过该工具就可以直接将音视频流播放出来,这是非常恐怖的事情。

在 WebRTC 中,为了防止这类事情发生,没有直接使用 RTP/RTCP 协议,而是使用了 SRTP/SRTCP 协议 ,即安全的 RTP/RTCP 协议。

WebRTC 使用了非常有名的 libsrtp 库将原来的 RTP/RTCP 协议数据转换成 SRTP/SRTCP 协议数据

SRTP要解决的问题

  • 对数据加密,保证数据安全
  • 保证数据完整性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值