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 的交互流程大概如下:

    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 在整个协商过程中与其他流程的时序关系。

本文福利, C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部↓↓

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 的内容是证书的摘要签名,用于验证证书的有效性,防止冒充。

原文链接:WebRTC 之 DTLS 技术解析 - 资料 - 我爱音视频网 - 构建全国最权威的音视频技术交流分享论坛

本文福利, C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部↓↓ 

猜你喜欢

转载自blog.csdn.net/m0_60259116/article/details/125935180