WebRTC DTLS 分析
日期: 2020-08-15 分类: 跨站数据测试 462次阅读
0x00 概述
DTLS(Datagram Transport Layer Security) 提供了 UDP 传输场景下的安全机制,能防止窃听、篡改、冒充等问题。在 WebRTC中使用 DTLS 的地方包括两部分:
- Datachannel 数据通道。在Datachannel数据通道中,WebRTC完全使用DTLS来进行协商和加解密
- MediaChannel 媒体通道。在媒体通道中 WebRTC 使用 SRTP 来进行数据的加解密,DTLS 的作用仅仅是用来做密钥交换,RTP/RTCP 的数据为了与历史设备兼容性的考虑,完全通过 SRTP 来实现。
DTLS的作用是给数据通道数据加密(保证数据安全性)、增加链路证书校验机制(防止网络攻击)。与 TLS over TCP 不同,UDP层没有对数据报文的乱序、丢包做处理,会导致链路证书校验协商无法保证。所以:
- DTLS在创建连接时的握手消息里面,需要增加可靠性传输机制。
- 由于 UDP 对数据的实时性要求比较高,所以链路建立稳定后,传输应用数据时,没有提供数据可靠性传输机制,需要 SCTP 协议或者应用层保证。
DTLS 可以参考的 RFC 文档:
DTLS 的交互流程大概如下:
Client Server
------ ------
ClientHello --------> Flight 1
<------- HelloVerifyRequest Flight 2
ClientHello --------> Flight 3
ServerHello \
Certificate* \
ServerKeyExchange* Flight 4
CertificateRequest* /
<-------- ServerHelloDone /
Certificate* \
ClientKeyExchange \
CertificateVerify* Flight 5
[ChangeCipherSpec] /
Finished --------> /
[ChangeCipherSpec] \ Flight 6
<-------- Finished /
Figure 1. Message flights for full handshake
下图为 WebRTC 媒体通过建立过程的简单描述,可以看出 DTLS 在整个协商过程中与其他流程的时序关系。
0x01 WebRTC 中 DTLS 参数
WebRTC 中的 DTLS 参数需要通过 SDP 信息来设置和传递,而且只需要两种 a line
表示:
a=setup
a=fingerprint
a=setup
表示 DTLS 的协商过程中角色,有三个可能值:
a=setup:actpass
既可以是 client 角色,也可以是 server 角色a=setup:active
client 角色a=setup:passive
server 角色
根据 RFC5763,SDP请求的 a=setup
属性必须是 actpass
,由应答方决定谁是 DTLS client,谁是 DTLS server。
a=fingerprint
的内容是证书的摘要签名,用于验证证书的有效性,防止冒充。
参考文档
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:RTC
上一篇: MySQL简单的基础知识(笔记)
下一篇: 微信群怎么引流?这八种方法效果最好!
精华推荐