libcurl 在使用摘要身份验证时出现不支持的协议错误

3

我的问题是,我正在使用没有身份验证、基本身份验证和摘要身份验证三种方式来发起RTSP请求,具体取决于我想要访问的摄像机。这个方法已经运行良好一段时间了,但最近,在使用摘要身份验证时,出现了以下错误:

*   Trying 127.0.0.1:8554...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 8554 (#0)
* Server auth using Digest with user 'ubnt'
> DESCRIBE rtsp://ubnt:administrator@127.0.0.1:8554/live.sdp RTSP/1.0
CSeq: 1
Accept: application/sdp

< RTSP/1.0 401 Unauthorized
< CSeq: 1
< WWW-Authenticate: Digest realm="GStreamer RTSP Server", nonce="3034e78651e4e61e"
< Server: GStreamer RTSP server
< Date: Sun, 12 Jan 2020 09:36:53 GMT
<
* Connection #0 to host 127.0.0.1 left intact
* Issue another request to this URL: 'rtsp://ubnt:administrator@127.0.0.1:8554/live.sdp'
* Protocol "rtsp" not supported or disabled in libcurl
* Closing connection -1

当我在同一台摄像机上切换到基本身份验证时,不会出现任何“Protocol“rtsp”not supported or disabled in libcurl”错误,而DESCRIBE/SETUP请求也按预期工作。

起初我认为问题出在我的代码上(我在go程序中使用libcurl绑定进行curl请求),但事实证明即使回滚到使用数字签名认证的第一个提交,问题仍无法解决。

我最初怀疑较新版本的libcurl存在漏洞,但目前尚无法确认。

有没有人知道我的问题可能是什么原因? 我应该向libcurl邮件列表发送电子邮件以解决这个问题吗?

更多信息的资源:

另外,只是为了明确,我没有禁用libcurl中的rtsp协议,在运行curl --version时它已启用(但是,正如前面所述,使用基本身份验证也可以正常工作):

curl 7.64.1 (x86_64-apple-darwin19.0) libcurl/7.64.1 (SecureTransport) LibreSSL/2.8.3 zlib/1.2.11 nghttp2/1.39.2
Release-Date: 2019-03-27
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS GSS-API HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz MultiSSL NTLM NTLM_WB SPNEGO SSL UnixSockets

最后一个额外说明,我能够在Linux和MacOS上重现此问题,并且我的项目的许多用户也在各种Linux发行版上遇到了同样的问题。


你能否升级到curl 7.68.0并再次尝试?这可能是一个错误,但不值得在11个月前的版本上进行调查。 - hanshenrik
(顺便说一句,我的第一个想法是你没有使用"./configure --enable-rtsp"编译curl,但由于rtsp在协议列表中,这可能不是问题) - hanshenrik
你确切使用了哪个命令?就记录而言,我无法用此curl命令进行复现:curl -v -X describe 'rtsp://ubnt:administrator@127.0.0.1:8554/live.sdp' 使用netcat服务器:printf 'RTSP/1.0 401 Unauthorized\r\nCSeq: 1\r\nWWW-Authenticate: Digest realm="GStreamer RTSP Server", nonce="3034e78651e4e61e"\r\nServer: GStreamer RTSP server\r\nDate: Sun, 12 Jan 2020 09:36:53 GMT\r\n\r\n' | nc -l 8554 - hanshenrik
我正在使用libcurl,而不是curl CLI。这里是curl选项设置和调用的位置:https://github.com/Ullaakut/cameradar/blob/master/attack.go#L285-L287 - Ullaakut
嗯,您能否提供一个IP地址/服务器以便我尝试重现它?如果这是您可以私下分享但不能公开分享的内容,可以在此处找到我的联系方式。 - hanshenrik
显示剩余3条评论
1个回答

3
这很可能是当前libcurl中RTSP授权支持出现了问题。目前有一份修复此问题的PR,但其已经停滞不前("比我想象的更复杂")。
在curl项目中,缺乏对RTSP感兴趣的人。我们欢迎您的帮助来解决这个问题。

2
啊哈,谢谢!我会研究一下的。根据PR的作者所说,在7.66.0版本之前,协议是正常工作的,而且我尝试过降级到比那更早的版本,但没有成功。我想我可能犯了一个错误,因为这完全有道理 :) 我会再次尝试降级以确认确实是因为这个问题,如果是的话,我很乐意帮忙解决这个问题。 - Ullaakut
2
我可以确认,使用旧版(包括 7.64.0)也可以正常运行!感谢您的回复 :) - Ullaakut

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