WebRTC使用了两个已经存在的协议 DTLS 和 SRTP
DTLS 类似 TLS,区别是DTLS是基于UDP的而不是基于TCP,因此DTLS协议需要自己处理可靠性问题
首先会用DTLS来握手,DTLS消息收发基于ICE建立的连接基础之上。
DTLS协议一端做为client,另一端做为server。
SRTP 协议的设计只是为了收发媒体数据。
SRTP session 开始时,会使用DTLS交换的密钥来进行初始化。
DTLS 握手状态机
DTLS握手主要的功能是Client和Server交换了一组可以用的key
DTLS握手完成后可以生成一组传输数据使用的加密key给SRTP协议使用
这个RFC中定义了生成算法: https://tools.ietf.org/html/rfc5705
Candidate如果发生变化,是否需要重新进行DTLS握手,并更新SRTP密钥呢
参考
https://webrtcforthecurious.com/docs/04-securing/
https://rtcweb-wg.github.io/security-arch/