curl 停止协商 SPNEGO - 未知 mech-code 0 for mech unknown
Posted
技术标签:
【中文标题】curl 停止协商 SPNEGO - 未知 mech-code 0 for mech unknown【英文标题】:curl stops negotiating SPNEGO - unknown mech-code 0 for mech unknown 【发布时间】:2016-01-16 16:34:09 【问题描述】:我尝试使用 curl 连接到 SPNEGO 安全网站(在 Mac OS X 10.10 上,附带 curl)
$curl -vv --negotiate -u : http://xxx-MacBook-Pro.local:8080 * 重建 URL 至:http://xxx-MacBook-Pro.local:8080/ * 尝试 192.168.1.6... * 连接到 xxx-MacBook-Pro.local (192.168.1.6) 端口 8080 (#0) > 获取/HTTP/1.1 > 主机:xxx-MacBook-Pro.local:8080 > 用户代理:curl/7.43.0 > 接受:*/* >问题似乎是“gss_init_sec_context() failed: : unknown mech-code 0 for mech unknown”。 curl 看起来可以用 SPNEGO/GSS 正确编译?
curl 7.43.0 (x86_64-apple-darwin14.0) libcurl/7.43.0 SecureTransport zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz UnixSockets
编辑:HTTPie (https://github.com/ndzou/httpie-negotiate) 表现出类似的行为。它在第一个服务器响应后停止。 服务器返回带有 401 响应的内容而不仅仅是标头是否重要?
获取/HTTP/1.1 接受: */* 接受编码:gzip,放气 连接:保持活动 主机:192.168.1.6:8080 用户代理:HTTPie/0.9.2 HTTP/1.1 401 未经授权 内容长度:209 内容类型:应用程序/json;字符集=UTF-8 WWW-认证:协商 “错误”: “标题”: “WWW-Authenticate”:“协商” , “原因”:空, “根本原因”: [ “标题”: “WWW-Authenticate”:“协商” , “原因”:空, “类型”:“xxx” ], “类型”:“xxx” , “状态”:401我怎样才能让 curl 开始工作并使用正确的机甲?
【问题讨论】:
您使用的是什么 GSS-API 实现?显示ldd curl
。
(mac上没有ldd) -> "otool -L /usr/bin/curl" master /usr/bin/curl: /usr/lib/libcurl.4.dylib (兼容版本7.0.0, 当前版本 8.0.0) /usr/lib/libz.1.dylib (兼容版本 1.0.0, 当前版本 1.2.5) /usr/lib/libSystem.B.dylib (兼容版本 1.0.0,当前版本 1213.0.0)
现在有问题。从输出中我看不到使用了什么 GSS-API 实现。请运行krb5-config --version
并显示结果。
$ krb5-config --help --version --> master Kerberos 5 release 1.7-prerelease(但是手册页说 otool -L /System/Library/Frameworks/Kerberos.framework/Versions/ A/Kerberos“海姆达尔”)
1.7?认真的?这是超过6.5岁。这是古老的。为什么输出显示 Heimdal 虽然是 MIT Kerberos?我强烈建议从源代码编译 MIT Kerberos 并将 curl 链接到它。如果可行,您可以进一步调查。
【参考方案1】:
当我没有拥有有效的 kerberos 票证时,我能够重现此行为。
> klist
Credentials cache: API:F8526791-7C98-45B7-87A0-8426165D376A
Principal: me@DOMAIN.COM
Issued Expires Principal
只要我通过 kinit 命令获得有效票证,身份验证就会按预期进行:
> kinit
> klist
Credentials cache: API:F90F79C6-6343-4462-BCD3-54F146FBDBCD
Principal: me@DOMAIN.COM
Issued Expires Principal
Sep 6 09:16:50 2016 Sep 6 19:16:50 2016 krbtgt/DOMAIN.COM@DOMAIN.COM
【讨论】:
以上是关于curl 停止协商 SPNEGO - 未知 mech-code 0 for mech unknown的主要内容,如果未能解决你的问题,请参考以下文章
CentOS PHP curl 无法协商一组可接受的安全参数