【ZeroRang WebRTC】WebRTC 信令与传输的安全层解析:WSS、DTLS、SRTP

WebRTC 信令与传输的安全层解析:WSS、DTLS、SRTP

整体脉络

  • WSS负责"约定如何通信":传递SDP(Offer/Answer)和ICE候选,建立媒体/数据的连接参数,但不承载媒体或数据本身。
  • DTLS负责"建立安全会话":点对点握手、协商密钥与算法;数据通道直接跑在DTLS之上。
  • SRTP负责"加密媒体":使用由DTLS导出的密钥,对RTP音视频包进行加密与完整性保护。

WSS 信令层

  • TLS保护的WebSocket(wss://),提供信令的机密性与完整性,防窃听与篡改。
  • 承载SDPICE消息;信令服务器的实现不被WebRTC标准化,可自定义。
  • 与媒体/数据传输解耦:即使信令走WSS,实际媒体走UDP点对点或经TURN
  • 安全意义:只保护信令通道,不参与媒体/数据的加密;但它承载的DTLS证书指纹等是后续安全的关键。

DTLS 与数据通道

  • DTLS是"基于UDPTLS",提供机密性、完整性、重放保护;典型启用DTLS 1.2,使用ECDHE实现前向安全。
  • 数据通道是SCTP over DTLSRTCDataChannel的可靠/部分可靠、按序/乱序属性来自SCTP;加密由下层DTLS提供。
  • 握手角色通过SDPa=setup确定(active/passive),证书指纹通过a=fingerprint绑定避免中间人攻击。
  • DTLS完成后导出密钥材料供SRTP使用(DTLS-SRTP),确保媒体与数据共享同一安全会话根。

SRTP 媒体层

  • RTP之上加密与鉴别:常见算法AEAD_AES_128_GCMAES_CM_128_HMAC_SHA1_80,并有SRTCP用于控制。
  • 保护负载与部分头扩展;路由必要的RTP头字段保持可见以便网络设备转发与同步。
  • 使用DTLS-SRTP派生的会话密钥,支持重放窗口与序号校验,抵抗重放与篡改。
  • 性能与实时性优先:设计上比纯TLS流更适合实时媒体(低抖动、包级保护)。

密钥协商与指纹绑定

  • 每个端生成自签证书;SDP里通过a=fingerprint公布哈希,远端在DTLS握手时校验证书与指纹一致。
  • 指纹绑定信令与媒体:即使有人控制信令服务器,篡改指纹也会导致DTLS握手失败,从而阻断中间人。
  • 前向安全:ECDHE临时密钥使得录制的流量在私钥泄露后仍无法解密。

与 ICE/STUN/TURN 的关系

  • ICE只负责路径选择;STUN提供外网地址探测;TURN在直连失败时中继。
  • 加密职责不在ICE/STUN:真正的加密由DTLS/SRTP完成。
  • 若经TURN中继:客户端到TURN常走UDPTCP,可叠加TLS(TURNS)保护至中继点;端到端媒体仍由SRTP保护。

端到端 vs 端到中端

  • 纯点对点:DTLSSRTP端到端,除RTP必要头外媒体负载不可见。
  • SFU:典型做法是SFU终止每个端的DTLS/SRTP并在转发前重新加密,安全是"端到中端";要实现真正E2EE需使用插入式加密(Insertable Streams)在应用层再次端到端加密负载。

常见问题与排查

  • 握手失败:检查SDPa=fingerprint是否匹配、a=setup角色是否正确、时钟偏差是否严重。
  • 传输受阻:防火墙阻断UDP导致回退到TCP/TURN,增加时延;确认ICE统计与候选优先级。
  • 算法不匹配:老设备仅支持AES_CM_128_HMAC_SHA1_80;现代偏好AEAD_AES_128_GCM,看webrtc-internalsStats确认。
  • 抓包验证:用Wireshark观察DTLS握手与SRTP报文;若启用密钥日志,可验证解密过程是否按预期。

快速对比

  • WSS:保护信令,承载SDP/ICE,与媒体/数据分离。
  • DTLS:握手与密钥协商,直接加密数据通道,向SRTP导出密钥。
  • SRTP:加密音视频流,面向实时、低开销的包级保护。

图示说明

  • 图1:安全分层总览(信令/数据/媒体分层关系)
flowchart LR A[Peer A]:::peer -- WSS/TLS (SDP/ICE) --> S[Signaling Server]:::srv B[Peer B]:::peer -- WSS/TLS (SDP/ICE) --> S A ---|SCTP over DTLS (DataChannel)| B A ---|RTP over SRTP (Media)| B classDef peer fill:#ffffff,stroke:#333333,stroke-width:1px classDef srv fill:#eef3ff,stroke:#335599,stroke-width:1px
  • 图2:握手与密钥导出(端到端建立过程)

Peer A Signaling Server Peer B WSS: Offer (SDP + ICE) WSS: Offer WSS: Answer (SDP + ICE) WSS: Answer ICE connectivity checks (STUN/TURN) DTLS handshake DTLS handshake Export keys (DTLS-SRTP) SRTP media + SRTCP SCTP over DTLS (DataChannel) Peer A Signaling Server Peer B

  • 图3:拓扑---直连、TURN 与 SFU 的安全属性

Through SFU Relay via TURN Direct P2P WSS/TLS WSS/TLS DTLS/SRTP DTLS/SRTP DTLS/SRTP DTLS/SRTP terminated Re-encrypt per subscriber SFU TURN Relay Peer B Peer A Signaling Server

相关推荐
qq_310658512 天前
webrtc代码走读(十七)-音频QOS-NetEQ
服务器·网络·c++·音视频·webrtc
txp玩Linux2 天前
rk3568上解析webrtc音频降噪算法处理流程
算法·音视频·webrtc
RTC老炮3 天前
webrtc降噪-WienerFilter源码分析与算法原理
算法·webrtc
赖small强3 天前
【ZeroRange WebRTC】Amazon Kinesis Video Streams WebRTC initSignaling() 技术深度解析
websocket·webrtc·stun·kinesis·initsignaling
红米饭配南瓜汤3 天前
WebRTC 码率预估(1) - 接收端 TransportFeedback 生成和发送流程指南
网络·音视频·webrtc·媒体
metaRTC4 天前
webRTC IPC客户端Flutter版编程指南
flutter·webrtc·ipc
ZEGO即构开发者4 天前
WebRTC 实战:用即构 SDK 搭建 Web 端 1v1 视频通话(含完整流程与 Demo)
前端·音视频·webrtc
RTC老炮5 天前
webrtc降噪-SpeechProbabilityEstimator类源码分析与算法原理
算法·webrtc
赖small强5 天前
【ZeroRange WebRTC】Amazon Kinesis音视频传输通路详细分析:ICE完成后的数据传输流程
webrtc·ice·dtls·音视频传输·srtp