Browsed by
Tag: dtls

DTLS-SRTP

DTLS-SRTP

去年底完成 SRTP 开发后,今年继续推进 DTLS-SRTP 开发。开发工作主要基于两点考虑:(1)后续和 webRTC 对接时,无论是 Chrome 还是 Firefox,都要求采用 DTLS-SRTP 传输媒体;(2)在企业通信领域,如果用户不部署「SIP over TLS」, SRTP 加密用的 key 和 salt 在 SIP 消息中明文传输,有可能被有心人士拦截,从而破解 SRTP 流。

与 webRTC 对接还有很多繁琐的细节需要处理,以后再另外讨论。

对于企业通信中可能存在的拦截破解问题,目前通用的解决方法就是部署 DTLS-SRTP。DTLS-SRTP 不再通过 SIP 会话消息传递 key 和 salt,而是在 SRTP 建立之时双方 RTP 端点先进行 DTLS 协商,双方交换证书和密钥,进而加密、解密出 key 和 salt。具体步骤如下图所示:

DTLS-SRTP 流程
DTLS-SRTP 流程

SIP 消息中有两处需要注意:

(1)fingerprint 参数,指示了各自证书的 fingerprint。双方在 DTLS 协商时以此验证证书的有效性。篡改 fingerprint 或者拦截证书,都会导致 DTLS 协商失败。

(2)setup 参数,指示 RTP 端点在 DTLS 协商过程中的角色。DTLS 协商明确要求一方是 client(即协商的发起方),另一方是 server,具体细节请参考 RFC5763

在 DTLS 协商过程中随机生成 key 和 salt,完成协商后 RTP 端点从结果中提取出双方的 key 和 salt,对 RTP 流加密和解密,也就是后续 SRTP 流的处理。