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

3

首先,我要为这篇长贴道歉。需要寻求任何见解和帮助...

我试图用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)

我将"user:password"进行base64编码后得到"YWRtaW46NDQxOWI2M2Y1ZTUxOjEyMzQ="。

但是,这样会出现401未授权的错误。

于是我打开了VLC并尝试连接,以确保凭据确实有效,在VLC连接字符串中输入:

rtsp://user:pass@:554

一切正常!

于是我启动wireshark来查看它正在做什么,并观察流量。在底层,vlc使用摘要认证而不是基本认证。

所以第一个问题是,基本认证是否适用于RTSP,还是它在欺骗我?如果应该适用,我需要做什么才能使其工作?

为了知道哪些内容可行,我尝试使用基于摘要的身份验证构建一些东西。在阅读了关于摘要认证的多个网站后,我需要弄清楚的第一件事是它正在使用的参数。从401响应中,我只有:

  1. 领域
  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个回答

3
一些摄像机制造商不支持基本身份验证。例如,Axis在最近的版本中已经取消了对其的支持。

你知道 Axis 使用哪种类型的授权吗? - waqaslam
1
他们使用HTTP摘要认证。 - ThiefMaster
虽然这是一个有效的评论,但它并不是一个答案。Axis相机不会回复“WWW-Authenticate: Basic realm = ...”。 - MSalters

0

基本身份验证应该可行。我刚刚从您的帖子中进行了反向工程,如果我们解码“YWRtaW46NDQxOWI2M2Y1ZTUxOjEyMzQ=”,解码后的字符串为“admin:4419b63f5e51:1234”,那么这里的密码和用户名是什么?可以吗?

在摘要身份验证中,您可以在qop、nor等字段的位置上传递空字符串。摘要身份验证响应生成器的C实现在以下RFC中提供:

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


那是正确的用户名和密码组合,如果你看下我指定的具体值,我说的是admin/1234。 - Tek Tengu
基本身份验证无法正常工作。我尝试了几种在线变体,但都没有成功。VLC也没有使用基本身份验证。那个4419b63f5e51字符串是我连接到的设备提供的领域值。 - Tek Tengu
如果使用基本身份验证,则根本不需要领域字符串。您只需要使用用户名和密码即可。因此,您正确的SETUP请求应包含以下身份验证标头“Authorization: Basic YWRtaW46MTIzNA ==” - pragnesh
我没有使用 Realm 进行基本身份验证。我知道如何做,但它没有起作用。我已经阅读了那份文件和其他几十份文件。相信我。 - Tek Tengu
设置 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)如果用户名为admin,密码为1234,则您请求中的Base64字符串是错误的。 - pragnesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接