2017-06-23 128 views
0

我試圖連接到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安全這樣的連接?

回答

1

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

相關問題