curl:如何在Windows上使用Kerberos代替NTLM身份验证?

问题描述:

我试图连接到Kerberos安全下的Livy REST服务。在Linux CentOS的curlnegotiate正常工作,接收一个Kerberos kinit票通过curl:如何在Windows上使用Kerberos代替NTLM身份验证?

curl --negotiate -u : http://service_link 

我面对的是试图做同样的远程Windows桌面上的问题连接后。我正在使用Windows的MIT Kerberos,它能够成功执行kinit。但是,curl似乎使用NTLM SSL票,而不是Kerberos的,这会导致下面的错误进行谈判:

AuthenticationFilter: Authentication exception: org.apache.hadoop.security.authentication.client.AuthenticationException 

我使用official curl release for windows尝试,具有这些特征(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 

gow 0.8.0 version of 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给力?是否可以调试Negotiator以查看是否(以及在哪里)查找Kerberos(可能不会看到)票据?

关于Kerberos,它似乎将keytabs存储在它的api上,所以我设置了KRB5CCNAME环境变量为API:Initial default ccache; klist能够看到票,但是,也许curl需要额外的规格?

而且 - 有没有其他的方法来curl与Kerberos安全这样的连接?

http://service_link是Kerberos的一个愚蠢的URL。由于这是一个单一的标签名称,客户端只会在默认的Realm中查找服务票据。最好使用FQDN,以便可以解析主机并将域部分与域相匹配。

此外,还有在您的文章没有一个SPN提及。如果curl可以猜出正确的KDC要与之通话,则需要在运行Web服务器上的auth的帐户上注册的SPN HTTP/service_link。

最后,你使用的提琴手等,以确认您的Web服务器发回的WWW身份验证:协商头部? curl确实有代理设置。

你不能强制Kerberos,如果所有的设置不正确。如果他们是对的,curl会先尝试并成功。根据什么是错误的,它可能会尝试遏制,然后恢复到NTLM。

+0

感谢您的回复,因此出现了其他问题,所以只有upvoted。 – Nutle

+0

由于我通过ssh对它进行隧道传输,所以服务链接很愚蠢,尽管在''hosts''中改变它并没有帮助。不是通过Fiddler,而是通过''curl''中的'--verbose''我可以看到服务器正在发回Negotiate头。所以我最好的猜测是,问题出在SPN HTTP/service_link正确注册,因为我不熟悉它,并且可能缺少一些设置。 – Nutle