2011-07-21 49 views
0

我有一個Linux服務器應用程序正在使用Kerberos進行客戶端身份驗證,並且客戶端需要在Windows上運行。 Kerberos票據由Windows Active Directory發佈。如果我使用MIT KfW 3.2.2,客戶端在服務器上驗證成功。 API用於從Kerberos服務器檢索AS和TGS票據並將它們存儲在Kerberos憑證存儲區中。但是這種方法的問題是用戶需要再次輸入他的憑證。 解決方案將訪問MS LSA商店,但這不起作用。 ms2mit.exe應用程序也沒有。不管我是以普通用戶身份還是以管理員身份運行它,或者如果我完全禁用UAC,都無關緊要。 這就是爲什麼我想在客戶端上使用SSPI來創建我要發送給服務器的KRB_AP_REQ消息。那可能嗎。如果是的話,該怎麼辦?如果不,我有什麼其他選擇?請注意,服務器已經建好,需要花費很大的努力去改變它,所以我想在windows上找到一個解決方案。來自SSPI的KRB_AP_REQ票證

+0

好吧,我在ASN.1查看器中打開了SSPI消息,看來Microsoft封裝了AP_REQ消息。包裝器(至少在我的情況下)包括對象標識符,布爾值和AP_REQ消息。如果我將此AP_REQ消息與MIT Kerberos庫一起使用,它會解碼OK。現在唯一的問題是如何通過使用文檔化的界面來做到這一點,因爲依賴無證的行爲可能會脆弱以用於生產。 – neznanec

+1

SSPI實際上是符合GSSAPI標準的RFC 1964實現。描述由InitializeSecurityContext爲Kerberos子系統返回的令牌格式的類ASN.1類型是InitialContextToken(RFC 1964 sec 1.1)。它在技術上並不是ASN.1,因爲它在KRB_AP_REQ之前有一個2字節的「標記」,這使其格式不正確。我知道它太晚了6年,但是從token + 17字節中獲取KRB_AP_REQ實際上並不是無證的行爲。 – Mark

回答

1

您可以使用windows SSPI子系統的AquireCredentialsHandleInitializeSecurityContext函數來獲取有效憑單並通過基於Linux的服務器進行身份驗證。

首先使用AcquireCredentialsHandle(),然後使用多次調用InitializeSecurityContext以及從服務器獲取的令牌,直到您的身份驗證。

相關問題