我正在尝试连接到kerberos安全下的livy rest服务。在linux centos上 curl
适合搭配 negotiate
,在收到kerberos kinit
通过售票连接
curl --negotiate -u : http://service_link
我所面临的问题是在远程windows桌面上尝试同样的操作。我正在使用mitkerberos for windows,它能够成功地 kinit
. 然而, curl
似乎正在使用ntlm ssl票证而不是kerberos进行协商,这将导致以下错误:
AuthenticationFilter: Authentication exception: org.apache.hadoop.security.authentication.client.AuthenticationException
我试过使用windows的官方curl版本,拥有这些特性( curl --version
):
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL libz TLS-SRP HTTP2 HTTPS-proxy
以及GOW0.8.0版本的curl:
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM SPNEGO SSL SSPI libz
这两种方法在谈判时都使用ntlm sll。
问:有没有办法强制使用kerberos而不是ntlm?是否可以调试谈判者以查看它是否(以及在哪里)在寻找kerberos(可能没有看到)票据?
关于kerberos,它似乎在其api上存储keytab,所以我设置了 KRB5CCNAME
环境变量到 API:Initial default ccache
; klist
不过,也许能看到票 curl
需要附加规格吗?
还有——有没有替代的方法 curl
与kerberos安全性的这种连接?
1条答案
按热度按时间h9vpoimq1#
http://service_link 是kerberos的愚蠢url。由于这是一个单标签名称,客户机将只在其默认域中查找服务票证。最好使用和fqdn,以便可以解析主机并将域部分与域匹配。
而且,在你的帖子里也没有提到spn。如果curl能够猜到正确的kdc,那么需要在web服务器上运行auth的帐户上注册spnhttp/service\链接。
最后,您是否使用fiddler或类似工具确认您的web服务器正在发回www authenticate:negotiate header ? curl没有代理设置。
如果所有设置都不正确,就不能强制kerberos。如果他们是对的,curl将首先尝试并成功。取决于什么是错误的,它可能会尝试路缘,然后恢复到ntlm。