无法解释RTSP认证(基本和摘要)

3 投票
2 回答
15043 浏览
提问于 2025-04-18 17:26

首先,抱歉这段文字有点长。我在寻找一些见解和帮助……

我想用Python写一个简单的RTSP认证工具。在测试中,我发现了一个摄像头的RTSP端口,当我访问它时,得到了以下回应:

Received, 'RTSP/1.0 401 Unauthorized\r\n
CSeq: 1\r\n
Session:        645252166;timeout=60\r\n
WWW-Authenticate: Digest realm="4419b63f5e51", nonce="8b84a3b789283a8bea8da7fa7d41f08b", stale="FALSE"\r\n
WWW-Authenticate: Basic realm="4419b63f5e51"\r\nDate:  Sat, Aug 16 2014 02:22:28 GMT\r\n\r\n',

从回应来看,似乎这个连接支持基本认证和摘要认证。所以我先试了基本认证。我构建了以下信息并发送:

SETUP rtsp://192.168.201.113 RTSP/1.0
CSeq: 1
Transport: RTP/AVP;unicast;client_port 4588-4589
Authorization: Basic YWRtaW46NDQxOWI2M2Y1ZTUxOjEyMzQ=
User-Agent: VLC media player (LIVE555 Streaming Media v2010.02.10)

在这里,我把“用户名:密码”进行了Base64编码,得到了“YWRtaW46NDQxOWI2M2Y1ZTUxOjEyMzQ=”。

但是,结果还是返回了401未授权的错误。

于是我打开VLC,尝试连接一下,确认一下我的凭据是否真的有效。在VLC的连接字符串中,我输入:

rtsp://user:pass@:554

结果一切正常!

接着,我启动Wireshark来查看它的操作,监控一下网络流量。发现VLC并没有使用基本认证,而是使用了摘要认证。

所以我的第一个问题是,基本认证在RTSP中有效吗?还是它在骗我?如果应该有效,那我缺少了什么才能让它工作呢?

根据我所了解的情况,我尝试构建一个基于摘要认证的东西。首先,我需要弄清楚摘要认证使用的参数。在401的回应中,我只得到了:

  1. realm
  2. nonce

我没有看到任何qop,也没有在VLC的发出信息中看到cnonce。我假设我们使用的是基本形式的摘要认证,其中:

H(A1) = MD5(user:realm:pass)
H(A2) = MD5(method:digestURI)
response = MD5(H(A1):nonce:H(A2)

我具体的值是:

H(A1) = MD5(admin:4419b63f5e51:1234) = d43b7f7d7f627da1aded72517f2a3c6c
H(A2) = MD5(DESCRIBE:rtsp://192.168.201.113) = a7c212739387f1550970752dc7a17fa2
response = MD5(d43b7f7d7f627da1aded72517f2a3c6c:57fa10a142d6c1f9e3dfabccc3ba045d:a7c212739387f1550970752dc7a17fa2) = 33477d22629eb37a6fc2d3435f03eb81

VLC发送的具体回应是:

0bde767876cbe8e6a6dfbba3c62c6db1

!= 33477d22629eb37a6fc2d3435f03eb81

它们不匹配!!??

没有足够的信息来进行另一种形式的摘要认证,那到底发生了什么呢?

2 个回答

0

基本认证应该是可以用的。我刚刚在根据你的帖子进行逆向工程,如果我们解码“YWRtaW46NDQxOWI2M2Y1ZTUxOjEyMzQ=”,解码后的字符串是“admin:4419b63f5e51:1234”,那么这里的用户名和密码是什么呢?这样可以吗?

在摘要认证中,你可以在像qop、nor等字段的位置传递一个空字符串。关于摘要认证响应生成器的C语言实现,可以在以下RFC中找到,

https://www.rfc-editor.org/rfc/rfc2617#section-5

3

有些相机制造商不支持基本认证。比如,Axis这个品牌在最近的版本中就取消了对基本认证的支持。

撰写回答