curl:如何在Windows上使用Kerberos代替NTLM身份验证?
我试图连接到Kerberos安全下的Livy REST服务。在Linux CentOS的curl
与negotiate
正常工作,接收一个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
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。
感谢您的回复,因此出现了其他问题,所以只有upvoted。 – Nutle
由于我通过ssh对它进行隧道传输,所以服务链接很愚蠢,尽管在''hosts''中改变它并没有帮助。不是通过Fiddler,而是通过''curl''中的'--verbose''我可以看到服务器正在发回Negotiate头。所以我最好的猜测是,问题出在SPN HTTP/service_link正确注册,因为我不熟悉它,并且可能缺少一些设置。 – Nutle