一种基于RTMP协议认证访问方法的流媒体系统的设计与实现

2023-12-02 09:25严竞雄
电脑知识与技术 2023年29期
关键词:鉴权校验客户端

严竞雄

(1.南通理工学院计算机与信息工程学院,江苏南通 226002;2.南通市虚拟现实与云计算重点实验室,江苏南通 226002;3.南通理工学院物联网工程教研室,江苏南通 226002;4.南通理工学院计算机技术应用研究所,江苏南通 226002)

0 引言

移动互联网时代,视频直播随处可见,人们更愿意以手机直播的方式来进行沟通和交流,直播手段也由开始的网页直播方式发展到移动手机直播方式[1],在享受移动设备便利的同时,网络安全也成为日益重要的话题。如何在保证直播正常开展的情况下,维护用户的个人信息和隐私不被泄露成为网民日益关心的话题。因此,直播信息安全越来越受到社会各界的重视。本文通过一种基于RTMP 协议鉴权接入方法的设计来进行流媒体系统的实现,从技术角分析了RTMP协议的安全性,对现有的流媒体架构进行改进,从而更好地保护直播数据流的信息安全。

由于窃取链接的频繁发生,反窃取链接技术应运而生,即通过一些技术手段和加密方法,防止非法用户访问,防止链盗从原始网站获取数据和流量,通过相关指标跟踪来源。一旦检测到来源不是站点,它将被阻止或返回到指定页面,以实现防盗链。RTMP 协议是一种用于实时数据通信的网络协议。它主要用于Flash/Air 平台与支持RTMP 协议的流媒体/交互式服务器之间的音频、视频和数据通信,因此可以用于支持网络直播。然而,当前的防盗链是基于HTTP 协议的网页,这在RTMP网络广播中很难实现。

RTMP防盗链是指通过在RTMP协议通信中添加鉴权令牌,来保证视频资源安全的一种方式。在加入RTMP 流媒体直播点播鉴权功能后,RTMP 协议中将包含若干个鉴权字符串,如用户名、密码、播放权限等。只有合法生成的鉴权令牌才能进行正常的推流和拉流;另外,推拉流的时间戳令牌具有时效性,只有在有效期内才能正常地推拉流。

1 技术简介

流媒体客户端采用ActionScript 编程语言进行设计与实现,通过Flash 采集用户视频和音频,采用H264进行视频编码,通过RTMP协议将编码的视频流推送到RTMP 服务端,服务器采用C++语言开发的RTMPServer,对外提供RTMP 直播服务,包含了基于RTMP 流媒体协议的相关交互过程,具有较强的先进性及应用价值。

2 功能原理

流媒体鉴权分为推流鉴权和拉流鉴权[2],都是利用RTMP 协议来实现的,该功能是通过RTMP 流媒体主机与客户端推拉流程序配合实现:

1)启用流媒体鉴权功能后,客户端向视频服务器请求推拉流地址前先将所需的权限信息和时效信息进行加密,生成鉴权串。

2)客户端向视频服务器发出包含鉴权串的RTMP请求。

3) 流媒体服务器对客户端发送的RTMP 协议中的权限信息和时效信息进行提取,获得加密鉴权串。

4) 流媒体服务器对RTMP 协议中的权限信息和时效信息进行验证,对合法且在有效期内的请求正常响应,对非法或过期的请求拒绝响应。

3 需求分析

在流媒体交互过程中,因为原始的RTMP 协议在客户端与服务器交互连接时并没有做权限验证,因此对于未经授权的直播流,RTMP 流媒体服务器并没有办法进行屏蔽拦截,因此需要对协议进行优化改进。RTMP协议交互连接的原理如图1所示。

图1 RTMP协议交互过程

图2 connect指令结构示意图

在RTMP协议进行connect命令交互的时候,可以对connect 命令中的AMF 消息进行追加token 相关字段,用于用户的权限验证。

4 鉴权方法

鉴权令牌的构成,即客户端通过生成的鉴权串如下:推拉流地址中,ntoken、ptoken、ttoken、ftoken 字段分别代表用户名、密码、时间戳和播放权限,其中,ttoken是生成校验字符串时的UNIX 时间戳,ntoken、ptoken、ttoken、ftoken中对应的值是根据一定规则生成的加密字符串。

5 系统设计

5.1 架构设计

项目架构如图3 所示,发布端用户通过RTMP 推流软件将摄像头采集的数据经过H264 编码后,转化为直播流推送到RTMP 流媒体核心服务器上,由核心服务器转发给边缘流媒体服务器,接收端用户通过播放器连接边缘流媒体服务器,从边缘流媒体服务器上获取数据流下载到本地进行视频解码,将解码后的数据通过播放器播放出来[3]。这种架构设计的优点在于,当访问或者是观看人数众多时,可以实现RTMP视频流量的负载均衡,将流量分别分散到各个流媒体服务器上,减轻核心流媒体服务器的负载压力,以获得较好的观看体验。

图3 流媒体架构示意图

5.2 服务器设计

在RTMP服务器设计方面,可以按功能进行划分,主要分为流媒体服务器的点播功能、直播功能、日志记录功能等[4],在服务器端,通过对RTMP协议connect交互时的代码进行改进,添加对connect时AMF信息的判断比对,实现RTMP直播推流时的交互鉴权。

表1 鉴权字段示例

鉴权方法:RTMP服务器节点收到推流请求时做如下校验。推流鉴权串中ttoken中的时间戳与当前时间相差不超过5分钟;

校验字段ntoken、ptoken、ftoken 所对应的值是否合法。RTMP服务器节点收到拉流请求时做如下校验。拉流鉴权串中ttoken中的时间戳与当前时间相差不超过5分钟;

校验字段ntoken、ptoken、ftoken 所对应的值是否合法。

5.3 客户端设计

客户端使用ActionScript 对Flash 进行编码,设计与服务器在连接交互时的接口,需要对ntoken、ptoken、ttoken、ftoken 设计字段,首先构造Object 这样一个类型的对象,将ntoken、ptoken、ttoken、ftoken这几个属性加入Object 对象当中,然后对ntoken、ptoken、ttoken、ftoken 进行赋值,分别表示姓名、密码、时间戳和播放权限。之后新建一个NetConnection的对象nc,使用addEventListener 监听网络连接事件,最后在连接时将accessToken 放在nc 对 象connect 函 数 的最后。

鉴权字符串生成

var ntoken: String =Base64.encode("Jack");

var ptoken: String =Base64.encode("123456");

var ttoken: String =Base64.encode(ts);

var ftoken: String =Base64.encode("bofang");

var accessToken =new Object();

accessToken.ntoken =ntoken;

accessToken.ptoken =ptoken;

accessToken.ttoken =ttoken;

accessToken.ftoken =ftoken;

nc = new NetConnection();

nc.client=this;

nc.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);

nc.connect("rtmp://192.168.10.254/live/",accessToken);

6 应用效果

通过测试客户端连接RTMP 流媒体服务器进行测试,可以从结果中看出,当客户端发出的ntoken、ptoken、ttoken、ftoken 字段编码经服务器校验错误时,客户端的播放请求遭到了服务器的拦截,客户端的event.info.code 显示为Failed。图4 为鉴权失败示意图。

图4 鉴权失败示意图

而当客户端发出的ntoken、ptoken、ttoken、ftoken编码字段经服务器校验正确时,客户端的播放请求得到服务器验证后放行,event.info.code 显示为Success。图5为鉴权成功示意图。

图5 鉴权成功示意图

7 结束语

通过这种方式进行流媒体鉴权,可以根据自身需求添加多个自定义加密Key,也可以用自定义的Key对默认的Key进行替换,同时还可以缩短或延长防盗链的有效时间。这样的设计为用户提供了自定义鉴权串的功能扩展和伸缩能力。

该方法与现有的RTMP 视频服务相比较,优点在于客户端向RTMP 服务器发起请求时,即客户端和服务器双方在进行connect交互时,客户端在RTMP协议中对connect的AMF消息进行追加token字段,用于用户的权限验证。该方法主要运用了C++语言进行程序编写,相关内容涉及Linux操作系统的配置与管理、流媒体服务器的安装与配置以及RTMP 客户端、发布端的部署与调优[5]。通过对RTMP协议connect交互时的安全性进行改进,以实现RTMP 直播推流时的交互鉴权,可以解决流媒体直播和点播过程中内容访问鉴权和对流媒体内容进行保护等相关安全性问题,利用该成果可开发出基于RTMP 协议的流媒体交互安全认证平台。

猜你喜欢
鉴权校验客户端
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
基于Vanconnect的智能家居瘦客户端的设计与实现
炉温均匀性校验在铸锻企业的应用
移动网络用户频繁鉴权问题的优化方案探讨
大型电动机高阻抗差动保护稳定校验研究
基于加窗插值FFT的PMU校验方法
锅炉安全阀在线校验不确定度评定
基于小型核心网的LTE鉴权的一种新实现
客户端空间数据缓存策略