我的本機電腦使用Windows 7 Pro,屬於LR領域,由AD伺服器管理。我在連接到該領域的網路時登入我的電腦。我可以使用 MIT Kerberos for Windows 版本查看 TGT。 4.0.1。
我想訪問外國領域的資源,FR。 LR 和 FR 之間沒有 Kerberos 信任,但它們允許彼此之間的 TCP 流量。我使用其 KDC(Red Hat IdM / FreeIPA)請求 FR 的 TGT,並在遇到挑戰時成功輸入我的密碼。同樣,我可以使用 MIT Kerberos for Windows 版本查看 TGT。 4.0.1。我現在可以透過 SSH 存取 FR 中的資源,而無需輸入密碼,儘管源自 LR。
問題是當我獲得 FR 的 TGT 時,我的 LR 主體的 TGT 消失了。只有 FR TGT 在 MIT Kerberos 中可見。如果我鎖定計算機,然後使用密碼解鎖,那麼 FR TGT 就會消失,取而代之的是新的 LR TGT。
看來 MIT Kerberos for Windows 一次只能儲存一個 TGT。每個 TGT 完全適用於其領域的所有意圖和目的。如何設定 MIT Kerberos,讓我同時擁有兩個 TGT,每個領域一個?是否可以「劃分」多個客戶端實例,每個實例都指向不同的 KRB5_CONFIG 和本地密鑰表?如果我不能,是否有客戶端 Kerberos 5 的替代 Windows 實現,即使沒有領域間信任?
PS - 我不要信託。得不到信任。
更新:我之前省略了其中一些細節,因為我認為這可能會混淆問題。但根據布拉德的回答,這可能是有道理的。我預計最多本機軟體將使用 Kerberos 內建的 Windows 實現,並始終使用 LR 金鑰表。
然而,像我這樣的高級用戶在 Cygwin 下使用 heimdal 來 SSH 進入 FR。我希望任何通過 Cygwin DLL 的東西都使用 heimdal,並且永遠不會看到 LR TGT(它不會,至少默認情況下不會)。我明確地啟動並繼續。
對於非高級用戶來說,棘手的部分是我必須支援那些不使用 Cygwin 但使用 PuTTY 的用戶。 PuTTY 確實允許您指定要使用的 GSSAPI 實作的程式庫路徑和 DLL。例如,我將 SSH 會話配置為使用 MIT Kerberos DLL,而不是內建的 Windows DLL。我希望有一個 DLL 要么從未嘗試查找 LR TGT(如 heimdal),要么允許來自多個領域的多個 TGT。它不必有像 MIT Kerberos 那樣的 GUI 窗口,但它很有幫助。
答案1
好吧,我不會說 Windows 無法做到這一點,但我會說該限制是基於會話的。 那麼問題是 Windows 會為每個會話快取一張票證。當您鎖定電腦然後解鎖時,會啟動另一個會話,並向 KDC 請求新金鑰。當您登出然後再次登入電腦時,也會發生同樣的情況。該方法實際上也是確定伺服器會話的使用者權限的方法,這意味著密鑰/票據可以被緩存,這樣您啟動的每個伺服器資源或會話就不必詢問您的密碼,但我從未聽說過/讀過/研究過它能夠緩存多個。
現在,您可能已經知道,鑑於您在問題中顯示的知識,所以我會說,基於 Windows 存儲您在發出 TGT 時獲得的密鑰並且是基於會話的密鑰這一事實,我不知道我認為只要Windows 就可以實現。適用於 Windows 的 MIT Kerberos 可能有一種方法可以在一個使用者下啟動兩個會話,但即便如此,我也不確定您正在存取的資源如何知道要使用哪個票證/金鑰對。那有意義嗎?
有關 Windows 如何儲存 TGT/金鑰對的說明,請參閱此內容。
順便說一句,非常好的問題。
答案2
好的,我已經提出了一個可行的解決方案,需要進一步完善,因此可能不適用於所有環境。
這適用於:
- 麻省理工學院的 Kerberos適用於 Windows 支援工具(KSETUP.EXE、KTPASS.EXE)的 Windows 4.0.1
- 油灰0.63
- Windows 7 SP1
我正在查看 MIT Kerberos 原始碼並發現了Windows 自述文件。特別有趣的是不同的數值憑證快取。它支援預設值應用程式介面:,但我驚訝地發現我的註冊表使用MSLSA:反而。
我嘗試過不同的價值觀抄送名稱在下面HKEY_CURRENT_USER\Software\MIT\Kerberos5
。我試過記憶:起初,這會導致一些有趣的行為。開啟 PuTTY 會話時,我的 MIT Kerberos Ticket Manager 視窗將會恢復並前往前台,要求我輸入憑證。哇!這以前從未發生過,但遺憾的是,PuTTY 會拒絕它。對我有用的價值是FILE:C:\Some\Full\File\Path
.我不太確定如何保護對指定文件的訪問,因此我將其作為讀者的練習。我得到了相同的窗口到前台行為,這次只有 PuTTY 喜歡它。票務管理器視窗最終也同時顯示了 LR 和 FR 票證。事實證明,這些票證是可轉發的,並且可以在多次 Windows 鎖定/解鎖後繼續存在。筆記:請務必在註冊表編輯之間完全退出並重新啟動票務管理器。我還沒有嘗試過抄送名稱的應用程式介面:然而。
我不知道這是否有什麼不同,但我也玩過設定在這開始工作之前。起初,無參數的 KSETUP 只會向我顯示有關 LR 的資訊。我在本地工作站上添加了一些有關 FR 的資訊。
ksetup /AddKdc FOREIGN.REALM KDC.FOREIGN.REALM
ksetup /AddRealmFlags FOREIGN.REALM TcpSupported Delegate NcSupported
答案3
對我來說,Windows 的 Kerberos 看起來有點像是實際上存在一個錯誤。
我發現了以下內容:
如果我使用 KfW 4.0.1 視窗中的「取得票據」選項,它就可以工作了(TM);我可以點擊“獲取門票”按鈕,並獲取額外的門票是我登入時獲得的原始門票。
如果我在 KfW 視窗中點擊「設為預設」選項,那麼從那時起,每次我點擊「取得票據」時,新票據都會代替任何票證都是預設票證,而不是將另一個條目添加到已知票證清單中。此時檢查註冊表將顯示ccname
已新增一個條目(如托迪烏斯的回答)。去除令人驚訝的是,該條目將恢復以前允許多票的行為。
答案4
根據 Toddius 的回答,我有一位同事處於類似的情況(Windows 7 Enterprise 64 位,加入 AD 網域,也運行 MIT Kerberos for Windows 4.0.1):他的 Kerberos Ticket Manager 副本將只允許他擁有一名委託人/一份TGT。每當他使用「取得票據」按鈕取得不同主體的 TGT 時,先前的主體就會消失。
我回顧了自述文件,並且大多數註冊表項均按預期設置,除了為了抄送名稱路徑上的鍵HKEY_CURRENT_USER\Software\MIT\Kerberos5
。該鍵已設定為 value MSLSA:
。我們的解決方法是將其更改為API:
.更具體地說,步驟是:
- 退出 Kerberos Ticket Manager 以及所有其他應用程式(因為您將重新啟動)。
- 在登錄路徑中
HKEY_CURRENT_USER\Software\MIT\Kerberos5
,更改抄送名稱鍵API:
(API,然後是冒號)。 - 退出註冊表,然後重新啟動。
- 重新登入後,執行 Kerberos Ticket Manager,然後使用「取得票證」按鈕取得非 AD 主體的 TGT。
透過上述步驟,一切順利,我的同事現在能夠同時看到多個委託人/TGT。
順便說一句,MIT Kerberos for Windows 引入了自己的一組命令列程式(如 klist),而這些程式支援多個憑證快取。在我的 64 位元系統上,當我"C:\Program Files\MIT\Kerberos\bin\klist.exe" -A"
在取得多個 TGT 後執行時,我會在 MSLSA 快取中看到我的 Active Directory 主體,然後每個附加主體都有一個 API 快取。
PS這是我在這個網站上的第一篇文章,所以我無法將其添加為托迪烏斯答案的評論。道歉!