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

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

整体脉络

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

WSS 信令层

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

DTLS 与数据通道

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

SRTP 媒体层

  • 在RTP之上加密与鉴别:常见算法AEAD_AES_128_GCM或AES_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常走UDP或TCP,可叠加TLS(TURNS)保护至中继点;端到端媒体仍由SRTP保护。

端到端 vs 端到中端

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

常见问题与排查

  • 握手失败:检查SDP的a=fingerprint是否匹配、a=setup角色是否正确、时钟偏差是否严重。
  • 传输受阻:防火墙阻断UDP导致回退到TCP/TURN,增加时延;确认ICE统计与候选优先级。
  • 算法不匹配:老设备仅支持AES_CM_128_HMAC_SHA1_80;现代偏好AEAD_AES_128_GCM,看webrtc-internals与Stats确认。
  • 抓包验证:用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

相关推荐
福大大架构师每日一题2 天前
mediamtx v1.21.2发布:UDP、JWT、RTSP、RTMP、HLS、WebRTC全面修复,稳定性与安全性再提升
网络协议·udp·webrtc
草根大哥4 天前
08-横向扩容与突发高并发:加机器到底买到了什么
运维·webrtc·srt·横向扩容·whip·自建cdn
草根大哥4 天前
07-P2P 直连与节点池调度
webrtc·p2p·srt·whip·whep·自建cdn
草根大哥4 天前
06-可观测性:端到端延迟、稳定性与画质
webrtc·srt·whip·自建cdn·ppcdn
大文说跨境4 天前
用 Python 自动化检测浏览器环境指纹:WebRTC 泄露、Canvas 哈希与时区一致性校验
python·自动化·webrtc
EasyDSS5 天前
基于WebRTC的视频会议系统:私有化视频会议平台EasyDSS视频会议到底能干什么
音视频·webrtc·easydss
福大大架构师每日一题8 天前
RustDesk 1.5.0发布:WebRTC、HDR 色调映射、剪贴板同步与百余项修复全面汇总
webrtc
福大大架构师每日一题13 天前
webrtc-rs/webrtc v0.21.0发布:API 可扩展、异步集成、确定性时间、ICE 重启与 SCTP 全面修复
webrtc
智联视频超融合平台13 天前
WebRTC + AI:实时音视频中嵌入神经网络推理的架构设计
人工智能·webrtc·实时音视频
P1Browser14 天前
换了 IP 还是被关联:WebRTC 泄露本地 IP 的三种触发路径
网络协议·tcp/ip·webrtc