【发布时间】: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 链接到它。如果可行,您可以进一步调查。