网站首页 > 技术文章 正文
如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。
概述
原始的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来加密媒体流,形成一个从控制到数据传输的全方位安全体系。这种组合确保了从会话建立到媒体播放的每一个环节都受到保护,满足了高安全标准的实时流媒体传输需求。
猜你喜欢
- 2024-11-25 最新FFmpeg RTSP流抓取
- 2024-11-25 WebRTC 拥塞控制 | 网络带宽过载检测
- 2024-11-25 YOLO对象检测算法也这么卷了吗——基于YOLOv8的人体姿态检测
- 2024-11-25 rtsp协议之请求响应示例
- 2024-11-25 rtsp开源服务器之live555
- 2024-11-25 全网最全的抓包工具的综合对比
- 2024-11-25 【开源】音视频并发测试工具
- 2024-11-25 深度学习实战 :智慧工地安全帽和危险区域检测系统(含代码)
- 2024-11-25 NAS部署AI视频卫士,压榨NAS的最后一滴性能,NAS性能检测镜像
- 2024-11-25 Java 监控直播流rtsp协议转rtmp、hls、httpflv协议返回浏览器
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)