【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

相关推荐
REDcker1 小时前
QUIC协议详解1
音视频·webrtc·实时音视频·webtransport
许彰午1 天前
WebRTC只管流不管控——自研信令服务器的状态机设计
运维·服务器·webrtc
ltlovezh1 天前
WebRTC SFU 架构:角色、推拉流与清晰度处理逻辑
webrtc
RTC老炮2 天前
WebRTC AEC3 算法原理分析
算法·webrtc
格林黄3 天前
WebSocket vs WebRTC 音频处理对比
websocket·音视频·webrtc
Fisher3Star3 天前
Mediasoup WebRtcTransport创建全流程解析
webrtc
Soari4 天前
挑战 100ms 延迟极限:深度拆解 dograh,构建企业级开源 WebRTC 实时语音智能体平台
开源·大模型·webrtc·实时音视频·voiceagent·语音智能体·dograh
被考核重击4 天前
WebRTC技术解析
webrtc
喵了几个咪5 天前
Kratos WebRTC 传输中间件:H5游戏P2P实时音视频与数据通信实战
游戏·微服务·中间件·golang·webrtc·实时音视频·kratos
喵个咪6 天前
Kratos + WebRTC 实战:实现浏览器 P2P 音视频通话与实时数据通信
后端·微服务·webrtc