【问题标题】:Can't Explain RTSP Authentication (Basic and Digest)无法解释 RTSP 身份验证(基本和摘要)
【发布时间】:2014-08-15 18:40:42
【问题描述】:

我为这篇长篇博文先道歉。寻找任何见解和帮助...

所以我试图在 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 Unauthorized 错误。

所以我拿出 VLC 并尝试连接,只是为了确保凭据确实有效,并在 VLC 连接字符串中输入:

rtsp://user:pass@:554

像魅力一样工作!

所以我启动了 wireshark 来看看它在做什么并观察流量。在底层,vlc 使用的是摘要身份验证,而不是基本身份验证。

所以第一个问题是,基本身份验证是否适用于 RTSP,还是在骗我?如果是这样,我缺少什么让它工作?

我所知道的有效。所以我尝试使用基于摘要的身份验证来构建一些东西。我需要弄清楚的第一件事是,在阅读了几个关于摘要式身份验证的站点之后,它正在使用的参数。从 401 响应中,我得到的只有:

  1. 领域
  2. 随机数

我没有任何 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

他们不匹配! ??

目前没有适当的信息来执行其他形式的 Digest Auth,那么这里发生了什么?

【问题讨论】:

    标签: python authentication rtsp digest


    【解决方案1】:

    某些相机制造商不支持基本身份验证。例如,Axis 在最近的版本中取消了对它的支持。

    【讨论】:

    • 你知道axis使用的是什么类型的授权吗?
    • 他们使用 HTTP 摘要认证
    • 虽然这是一个有效的评论,但它不是一个答案。 Axis 相机不回复“WWW-Authenticate: Basic realm=...`。
    【解决方案2】:

    基本身份验证应该可以工作。我只是从你的帖子中进行逆向工程,如果我们解码 "YWRtaW46NDQxOWI2M2Y1ZTUxOjEyMzQ=" 解码的字符串是 "admin:4419b63f5e51:1234" 那么这里的密码和用户名是什么?这样可以吗?

    在摘要身份验证中,您传递 NULL 字符串来代替 qop 等字段。以下 RFC 中提供了摘要身份验证响应生成器的 C 实现,

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

    【讨论】:

    • 这是正确的用户/通行证组合,如果你往下看我声明的具体值是 admin/1234
    • 基本身份验证不起作用。我在网上尝试了几种变体,但都没有奏效。 VLC 也没有使用基本身份验证。那个 4419b63f5e51 字符串是我要连接的设备提供的领域值。
    • 在基本身份验证领域字符串的情况下根本不需要。您只需要使用用户名和密码。因此,您正确的 SETUP 请求应包含以下身份验证标头“授权:基本 YWRtaW46MTIzNA==”
    • 我没有将领域用于基本身份验证。我知道该怎么做,它没有用。我已经阅读了该文件和其他几十份文件。相信我。
    • 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媒体播放器(LIVE555 Streaming Media v2010.02.10)如果用户名和密码分别为admin和1234,则请求中的Base64字符串错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 2013-05-16
    • 1970-01-01
    • 2012-03-21
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多