概述

        在多媒体流传输方向,RTSP凭借其对实时性、可控制性的良好支持,成为视频监控、在线直播等领域不可或缺的协议之一。然而,安全是任何网络通信的核心,尤其是在涉及敏感内容的实时流传输中。另外,RTSP认证不仅是技术上的必要性,也是业务层面维护合法合规、保护用户隐私、确保服务质量的重要手段。通过有效的认证机制,可以构建一个既安全又可靠的内容分发网络,促进流媒体服务的健康发展。

        RTSP认证的方式主要有以下三种,分别为:URL认证、基本认证、摘要认证。

URL认证

        URL认证是一种直接在RTSP请求的URL中嵌入认证信息的认证方式,这种方式简化了认证过程。在URL认证中,用户的凭据信息,通常是用户名和密码,直接附加在URL中,位于服务器地址之前。具体格式如下:

        rtsp://用户名:密码@服务器地址:端口/流路径

        比如这个URL地址:rtsp://hope:wisdom@192.168.1.188:554/live/stream,“hope”是用户名,“wisdom”是密码,服务器地址是“192.168.1.188”,端口是默认的554,流的路径是“/live/stream”。

        URL认证虽然简单直接,但它存在显著的安全风险,主要有以下几点。

        1、密码以明文形式出现在URL中,容易被网络嗅探工具捕获,尤其是在不安全的网络环境中。

        2、浏览器历史、服务器日志或代理服务器可能存储完整的URL,导致凭据信息泄露。

        3、用户可能不经意间通过电子邮件、即时消息或社交媒体分享含有认证信息的完整URL,从而大大增加了泄露风险。

        由于上述安全性问题,RTSP URL认证在现代网络应用中并不推荐作为主要认证手段。它更多地被看作一种便利性措施,适用于测试环境或高度信任的局域网环境,且仅在确信没有安全威胁的情况下使用。

基本认证

        基本认证,即Basic Authentication,是一种简单的认证机制,用于验证客户端对服务器资源的访问权限。它基于HTTP的认证框架,遵循RFC 2617标准。基本认证的大致工作流程如下。

        1、请求资源。客户端向服务器发送一个未携带认证信息的RTSP请求(比如:DESCRIBE、SETUP等)以访问受保护资源。

        2、认证挑战。如果服务器需要认证,它会响应一个401 Unauthorized状态码,并在响应头中包含一个WWW-Authenticate字段,指示客户端需要进行基本认证。

RTSP/1.0 401 Unauthorized
WWW-Authenticate: Basic realm="RTSP Server by Hope"

        其中,“Basic”表示使用基本认证,“realm”用于指示认证的范围或领域,客户端可能会显示给用户看,以便用户理解认证的上下文。

        3、提供凭证。客户端收到401响应后,将用户名和密码用冒号连接,形成username:password字符串,然后对该字符串进行Base64编码。编码后的字符串作为认证信息,放在请求头的Authorization字段中,再次发送请求。

Authorization: Basic dXWlcm5hbWU6cGFzc3dvcmF=

        其中,“Basic”表示使用基本认证。“dXWlcm5hbWU6cGFzc3dvcmF=”是username:password的Base64编码。

        4、认证校验。服务器收到带有Authorization头的请求后,解码Base64字符串,并校验用户名和密码是否匹配。如果校验成功,服务器将按照正常流程进行处理。否则,可能会再次返回401 Unauthorized响应。

        可以看到,基本认证易于实现,只需要简单的Base64编码即可,不需要额外的加密处理。但其最大的缺点是不安全,因为Base64编码只是编码方式,不是加密,容易被解码。在未加密的网络环境中,认证信息可能被截获,导致安全风险。鉴于其安全性问题,基本认证通常只适合在安全的网络环境下使用,或作为测试用途。在生产环境中,推荐使用更安全的认证方式,比如:摘要认证或配合TLS/SSL加密。

摘要认证

        摘要认证,即Digest Authentication,是一种比基本认证更安全的认证机制,旨在解决基本认证中密码明文传输的问题。它也基于HTTP的认证框架,遵循RFC 2617标准。摘要认证的大致工作流程如下。

        1、请求资源。客户端向服务器发送一个未携带认证信息的RTSP请求(比如:DESCRIBE、SETUP等)以访问受保护资源。

        2、认证挑战。如果服务器需要认证,它会响应一个401 Unauthorized状态码,并在响应头中包含一个WWW-Authenticate字段。该字段指示客户端需要进行摘要认证,并提供一个nonce以及其他可能需要的信息。

WWW-Authenticate: Digest realm="RTSP Server by Hope",
                    nonce="randomlyGeneratedNonceValue",
                    algorithm="MD5",
                    qop="auth"

        其中,“Basic”表示使用摘要认证,“realm”定义了认证的范围或领域,“nonce”是服务器生成的一次性密钥,“algorithm”指定摘要算法(一般为MD5),“qop”指定了安全强度。

        3、计算摘要。客户端收到挑战后,使用提供的nonce、请求方法(比如:DESCRIBE)、请求URL、用户名、密码及其它可能的参数,根据摘要算法计算出一个摘要值。在计算过程中,更高的安全强度可能还会用到客户端生成的随机数(cnonce)和nc(nonce计数器),以防止重放攻击。摘要值的计算公式如下:

        response = MD5(MD5(username:realm:password):nonce:MD5(public_method:url))

        4、提供凭证。客户端将计算得到的摘要值,以及一些用于验证的信息(比如:nonce、nc、cnonce、qop等)封装在Authorization请求头中,重新发送请求到服务器。

Authorization: Digest username="admin",
                    realm="RTSP Server by Hope",
                    nonce="randomlyGeneratedNonceValue",
                    uri="/video/stream",
                    response="calculatedResponseDigest",
                    algorithm=MD5,
                    cnonce="clientNonceValue",
                    nc=00000001,
                    qop=auth

        5、认证校验。服务器使用相同的算法和信息(通常为用户名和密码)重新计算摘要,并与客户端提供的摘要值进行比较。如果匹配,服务器将按照正常流程进行处理。否则,可能会再次返回401 Unauthorized响应。

        通过上面的工作流程可以看到,摘要认证不直接传输密码,而是传输密码的哈希值。即使网络被监听,攻击者也很难直接获得密码。另外,通过nonce、nc和cnonce等机制,摘要认证能有效抵御重放攻击。相比于基本认证,摘要认证涉及更多的计算步骤,但这是为了提升安全性所必须付出的代价。

05-15 20:05