2011-06-20 86 views
3

是否可以使用GSSAPI進行NTLM v1/v2身份驗證?我正在嘗試構建一個Web服務器,與squid/apache非常相似,但我想使用NTLM /協商協議來驗證可能使用IE/FireFox的客戶端。我嘗試使用heimdal庫,但無法使gss_accept_sec_context正常工作。它僅僅因「請求不支持的機制」而失敗。在gss_accept_sec_context嘗試之前調用gss_acquire_cred時,我可以確認服務主體名稱,spnego的OID等確實發生了。當然,我通過base64解碼授權標頭來提取從客戶端收到的令牌。我正在使用C++,並在debian上進行實驗。 我相信這裏周圍的一個精彩的黑客知道更多,希望會分享一些重要的線索。用於NTLM身份驗證的GSSAPI

在此先感謝。

+0

你正在發送'WWW-Authenticate:Negotiate'頭文件嗎?客戶端將嘗試Kerberos身份驗證,而不是NTLM。 –

+0

我認爲答案是否定的 - GSSAPI只能執行Kerberos。爲什麼要使用NTLM而不是Kerberos? –

+0

@愛德華湯姆森GSSAPI *可以*做NTLM。 GSSAPI中的G表示* generic *。 Kerberos和NTLM是GSSAPI可以使用的幾種*機制中的兩種*機制。 –

回答

1

Heimdal的NTLM庫也支持客戶端。您可以使用庫原語生成類型1,2和3消息,並且它可以工作。 但是,我不知道,您是否可以爲此使用Heimdal頂部的GSS-API。我假設測試,你也可以這樣做。

1

我不確定Heimdal圖書館和它是否與GSS合作,但gss ntlm ssp明確聲稱是一個gss圖書館。 我期望您需要下載並構建它,然後您需要在Debian和Ubuntu上設置/ etc/gss/mech(或/ usr/etc/gss/mech)來指向該庫。 Ther構建系統將在其示例目錄中的mech文件中創建一個您需要的示例。

您可能會遇到麻煩,在spnego下運行此操作。當Windows將NTLM作爲協商包最受歡迎的機制時,它將發送原始NTLM令牌而不是RFC 4178中定義的SPNEGO令牌。它肯定會通過gss_accept_sec_context指示不受支持的機制。