libcurl 仅在使用摘要身份验证时不支持协议
libcurl unsupported protocol only when using digest authentication
我的问题如下,我正在使用无身份验证、基本身份验证和摘要身份验证发出 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 请求按预期工作。
我认为问题出在我的代码中(我正在从一个使用 libcurl 绑定的 go 程序发出 curl 请求),但事实证明,即使恢复到使用摘要身份验证的第一个提交也不会解决问题。
我最初怀疑较新的 libcurl 版本中存在错误,但目前无法确认。
有人知道我的问题可能是什么原因吗? 我应该就此向 libcurl 邮件列表发送电子邮件吗?
获取更多信息的资源:
- The repo in which I encounter this issue
- The golang libcurl bindings I use
- PR introducing digest auth support, which worked fine at the time
- The place where authentication options are set / where the perform fails
- 可以使用以下命令在使用 RTSPATT 生成的虚拟 RTSP 服务器上重现此问题
docker run --rm -e RTSP_AUTHENTICATION_METHOD="digest" -p 8554:8554 ullaakut/rtspatt
此外,为了清楚起见,我没有从 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 的各种发行版上也遇到了同样的问题。
这很可能是当前 libcurl 中损坏的 RTSP 身份验证支持。有一个 current PR 可以解决这个问题,但它已经停滞了 ("It's more complicated than I thought")。
curl 项目中缺少对 RTSP 感兴趣的人。我们欢迎您帮助解决此问题。
我的问题如下,我正在使用无身份验证、基本身份验证和摘要身份验证发出 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 请求按预期工作。
我认为问题出在我的代码中(我正在从一个使用 libcurl 绑定的 go 程序发出 curl 请求),但事实证明,即使恢复到使用摘要身份验证的第一个提交也不会解决问题。
我最初怀疑较新的 libcurl 版本中存在错误,但目前无法确认。
有人知道我的问题可能是什么原因吗? 我应该就此向 libcurl 邮件列表发送电子邮件吗?
获取更多信息的资源:
- The repo in which I encounter this issue
- The golang libcurl bindings I use
- PR introducing digest auth support, which worked fine at the time
- The place where authentication options are set / where the perform fails
- 可以使用以下命令在使用 RTSPATT 生成的虚拟 RTSP 服务器上重现此问题
docker run --rm -e RTSP_AUTHENTICATION_METHOD="digest" -p 8554:8554 ullaakut/rtspatt
此外,为了清楚起见,我没有从 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 的各种发行版上也遇到了同样的问题。
这很可能是当前 libcurl 中损坏的 RTSP 身份验证支持。有一个 current PR 可以解决这个问题,但它已经停滞了 ("It's more complicated than I thought")。
curl 项目中缺少对 RTSP 感兴趣的人。我们欢迎您帮助解决此问题。