计算机系统应用教程网站

网站首页 > 技术文章 正文

从零开始精通RTSP之加密

btikc 2024-11-25 10:03:19 技术文章 22 ℃ 0 评论

如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。

概述

原始的RTSP通信默认使用的是明文传输,这也就意味着,在网络上的任何节点都能轻易地查看或修改传输的内容。这在涉及隐私或版权保护的场景下,是完全不可接受的。因此,加密显得尤为重要。加密的目的主要有三点:一是进行身份验证,确认通信双方的身份;二是确保数据在传输过程中,不被未经授权的第三方读取;三是保证数据的完整性,确保数据在传输过程中不被篡改。

为了加密传输信令和码流,确保媒体数据的安全性,通常采取以下两种策略:RTSP Over TLS、SRTP。

RTSP Over TLS

RTSP Over TLS是指在RTSP协议通信过程中,使用TLS(Transport Layer Security)协议或SSL(Secure Sockets Layer)协议对RTSP信令消息进行加密传输,以保护通信内容的安全性和隐私性。这类似于HTTPS对于HTTP的加密方式,提高了协议的安全等级。

实现RTSP Over TLS的大致步骤如下。

1、证书准备。我们需要为RTSP服务器配置一个有效的SSL/TLS证书,证书可以是从受信任的CA(Certificate Authority,证书颁发机构)购买的证书,也可以是自签名证书(主要用于测试环境,生产环境不推荐)。

2、服务器配置。大多数现代的RTSP服务器软件(比如:VLC、GStreamer等)都支持TLS加密,我们需要在服务器配置文件中指定证书和私钥的路径,并启用TLS端口。TLS端口默认是443,也可以是其他端口,比如:554等。

3、客户端连接。客户端需要使用支持TLS的RTSP URL来发起连接请求,格式通常为:

rtsps://address:port/path

上面的“rtsps”表示安全连接,即TLS加密。

4、握手与验证。连接建立过程中,客户端与服务器会执行TLS握手,验证服务器证书的有效性。如果证书被客户端信任,则建立加密连接。否则,连接可能会失败。

注意:默认的RTSP端口是554,但未指定是否加密。使用TLS时,通常建议使用443端口,这是TLS的标准端口。当然,也可以选择其他端口,并明确告知客户端。TLS加密会增加额外的CPU负载,尤其是在视频流传输这样对实时性要求较高的场景中,需要确保服务器有足够的处理能力。另外,RTSP Over TLS只会对RTSP的信令进行加密,并不会对媒体流进行加密。


SRTP

对于媒体流的加密,最常用的是SRTP(Secure RTP)。SRTP是一种专为RTP设计的安全增强层协议,是对RTP协议的扩展,提供了对媒体流数据包的加密、消息认证、重放保护和密钥管理等功能。它支持多种加密算法,比如:AES-CM、AES-GCM等。同样的,RTCP协议也可以扩展为更安全的SRTCP(Secure RTCP)。

SRTP的报文格式如下,其Payload部分是加密的。可以看到,除了末尾的SRTP MKI和authentication tag外,其他与RTP报文完全相同。

SRTP MKI :可选,用于标识主密钥。MKI不受完整性保护,因为这不提供任何额外保护。

Authentication Tag:推荐使用,认证标签,用于携带消息认证数据。SRTP数据包的认证部分由RTP头和加密的Payload部分组成。身份验证标签可以提高对RTP头和有效载荷的身份验证,并通过对序列号进行身份验证来间接提供重放保护。

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+
     |V=2|P|X|  CC   |M|     PT      |       sequence number         | |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
     |                           timestamp                           | |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
     |           synchronization source (SSRC) identifier            | |
     +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ |
     |            contributing source (CSRC) identifiers             | |
     |                               ....                            | |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
     |                   RTP extension (OPTIONAL)                    | |
   +>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
   | |                          Payload  ...                         | |
   | |                               +-------------------------------+ |
   | |                               | RTP padding   | RTP pad count | |
   +>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+
   | ~                     SRTP MKI (OPTIONAL)                       ~ |
   | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
   | :                 Authentication Tag (RECOMMENDED)              : |
   | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |

实现SRTP的大致步骤如下。

1、会话建立。首先,客户端发送一个OPTIONS请求来查询服务器支持的命令集。虽然这一步不是必须的,但在某些情况下有助于客户端了解服务器的能力。然后,客户端发送DESCRIBE请求获取会话描述信息,SDP中可能包含有关媒体类型、编码、端口等信息。对于SRTP,SDP中还可能包含安全属性行(比如:a=crypto),以表明支持安全传输。

2、协商加密。在RTSP的SETUP请求和响应中,客户端和服务器协商使用SRTP。比如:客户端可以请求使用SRTP传输。

SETUP rtsp://server.example.com/stream/trackID=1 RTSP/1.0
Transport: RTP/SAVPF;unicast;client_port=49154-49155

密钥的协商,可以通过外部机制(比如:DTLS-SRTP、SDES 、ZRTP等)来进行。如果使用DTLS-SRTP,客户端和服务器会在RTSP SETUP之后,基于RTSP提供的传输信息,建立DTLS连接,通过DTLS通道安全地交换SRTP密钥和参数。

3、初始化SRTP上下文。一旦密钥通过DTLS-SRTP成功交换,客户端和服务器都会使用这些密钥初始化各自的SRTP和SRTCP上下文。

4、开始播放。客户端发送PLAY请求,开始媒体流的传输。此时,所有RTP和RTCP数据包都通过之前建立的安全通道传输,并应用SRTP/SRTCP进行加密和认证。

5、媒体流加密传输。在媒体流传输期间,RTP数据包被加密并通过安全的通道传输,而RTCP包用于质量控制和反馈,同样受到SRTCP的保护。

6、会话结束。当会话结束时,除了RTSP的TEARDOWN信令外,还需要确保所有安全上下文被正确清理,包括释放DTLS连接和废弃SRTP密钥,以保障安全性。


总结

为了全面保护RTSP流媒体通信的全流程,通常会结合使用RTSP Over TLS来加密控制信令,以及SRTP来加密媒体流,形成一个从控制到数据传输的全方位安全体系。这种组合确保了从会话建立到媒体播放的每一个环节都受到保护,满足了高安全标准的实时流媒体传输需求。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表