WebRTC之DTLS技术解析

概述
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 文档:
rfc4347
rfc5763
DTLS 的交互流程大概如下:

    Peer-1                                                    Peer-2
    ------                                                    ------
 
    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 在整个协商过程中与其他流程的时序关系。
在这里插入图片描述
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 的内容是证书的摘要签名,用于验证证书的有效性,防止冒充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值