【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

相关推荐
雨落秋垣1 天前
大屏可视化系统:WebRTC视频流与WebSocket实时数据集成方案
websocket·网络协议·webrtc
此颜差矣。2 天前
封装 WebRTC 低延迟视频流与 WebSocket 实时状态驱动的大屏可视化
websocket·webrtc·低延迟视频流
metaRTC2 天前
metaRTC 8.0 重磅发布:专为新一代 AI 终端而生的实时通信引擎
ai·webrtc
三十_A5 天前
WebRTC 入门:一分钟理解会议系统的三种架构(Mesh/SFU/MCU)
架构·webrtc
qq_310658516 天前
webrtc源码走读(五)核心引擎层——传输模块
服务器·网络·音视频·webrtc
三十_6 天前
WebRTC 入门:一分钟理解会议系统的三种架构(Mesh/SFU/MCU)
前端·后端·webrtc
qq_310658516 天前
webrtc源码走读(六)核心引擎层——安全模块
服务器·c++·音视频·webrtc
REDcker6 天前
WebRTC-HTTP 出口协议 (WHEP) draft-murillo-whep-01 中文翻译
网络协议·http·webrtc
qq_310658516 天前
webrtc源码走读(七)核心引擎层——Qos模块
服务器·c++·音视频·webrtc