單點(diǎn)登錄(SSO)的核心--kerberos身份認證協(xié)議技術(shù)參考(一)微軟Windows Server 2003操作系統實(shí)現Kerberos 版本5的身份認證協(xié)議。Windows Server 2003同時(shí)也實(shí)現了公鑰身份認證的擴展。Kerberos身份驗證的客戶(hù)端實(shí)現為一個(gè)SSP(security support provider),能夠通過(guò)SSPI(Security Support Provider Interface)進(jìn)行訪(fǎng)問(wèn)。最初的用戶(hù)身份驗證是跟Winlogon的單點(diǎn)登錄架構集成在一起的。Kerberos的KDC(Key Distribution Center)跟Windows Server 2003的域控制器DC(domain controller)上的安全服務(wù)集成在一起,KDC使用域的活動(dòng)目錄數據庫作為它的安全帳戶(hù)數據庫,缺省的Kerberos實(shí)現要求活動(dòng)目錄的支持。
這個(gè)主題將解釋W(xué)indows Server 2003是怎樣支持Kerberos V5協(xié)議及其擴展的。
Kerberos 身份驗證
Kerberos V5身份驗證協(xié)議提供一個(gè)在客戶(hù)端跟服務(wù)器端之間或者服務(wù)器與服務(wù)器之間的身份驗證機制 (并且是相互的身份驗證機制)
Windows Server 2003把Kerberos V5身份驗證協(xié)議實(shí)現為一個(gè)能夠通過(guò)SSPS(Security Support Provider Interface)的SSP(security support provider),另外,Windows Server 2003還通過(guò)使用智能卡的公共密鑰證書(shū)(public key certificates)進(jìn)行初始身份驗證來(lái)擴展此協(xié)議。
Kerberos的密鑰分發(fā)中心 KDC(Key Distribution Center)使用活動(dòng)目錄的服務(wù)數據庫作為自己安全帳戶(hù)數據庫。NTLM 和 Kerberos的缺省實(shí)現都需要活動(dòng)目錄的支持。
Kerberos V5協(xié)議假設客戶(hù)端和服務(wù)端的最初信息交換發(fā)生在開(kāi)放的網(wǎng)絡(luò )環(huán)境中,在網(wǎng)上傳輸的數據包能夠被監視并能被任意修改。這個(gè)假設的環(huán)境,跟現在的因特網(wǎng)非常相似,攻擊者可以非常容易的偽裝為一個(gè)客戶(hù)端或者一個(gè)服務(wù)器,也能很容易的竊聽(tīng)和篡改合法客戶(hù)端和服務(wù)端之間的通訊。
微軟的Kerberos V5協(xié)議實(shí)現是:
Windows Server 2003的缺省身份認證
Kerberos V5協(xié)議成為Windows 2003的缺省身份驗證,Windows Server 2003還為了能支持Windows NT Server 4.0等非Kerberos的操作系統還支持NTLM協(xié)議。
基于RFC 1510及其修訂草案
Kerberos協(xié)議是成熟的、廣泛應用的、開(kāi)放的標準,微軟Kerberos V5協(xié)議的實(shí)現遵循RFC的標準,因此能提供跟其他實(shí)現的互操作。
可擴展性
Kerberos 架構允許你指定另外的或者可以替換的安全方案。并且,可以通過(guò)智能卡的公鑰/私鑰來(lái)提供缺省的共享安全密鑰過(guò)程。
身份認證帶來(lái)的好處
Kerberos V5協(xié)議比NTLM協(xié)議更安全、更靈活,更有效,用Kerberos身份驗證能夠獲得的好處是:
當Windows的服務(wù)為某個(gè)客戶(hù)端訪(fǎng)問(wèn)資源時(shí)會(huì )扮演這個(gè)客戶(hù)端,在多數情況下,在本機上一個(gè)服務(wù)能夠為客戶(hù)端完成訪(fǎng)問(wèn)資源的工作,因為NTLM和Kerberos都能為服務(wù)提供需要扮演客戶(hù)端的信息??墒?,在分布式應用被設計為前端服務(wù)扮演客戶(hù)端連接到在其他服務(wù)器上的后端服務(wù),Kerberos V5協(xié)議包括一個(gè)允許服務(wù)扮演客戶(hù)端連接到其他服務(wù)器上的服務(wù)的代理機制,NTLM則沒(méi)有這樣的功能。
Interoperability.
微軟的Kerberos V5實(shí)現是基于IETF的推薦標準規范。這樣,Windows Server 2003的Kerberos V5實(shí)現就為其他使用Kerberos V5協(xié)議的網(wǎng)絡(luò )的互操作打下了基礎。
對于NTLM,為了驗證每一個(gè)客戶(hù)端,應用服務(wù)器必須連接到域控制器以證實(shí)客戶(hù)端身份。對于Kerberos V5身份驗證協(xié)議,服務(wù)器不用去連接域控制器,相應的,服務(wù)器可以檢驗客戶(hù)端提供的驗證票??蛻?hù)端可以為特定的服務(wù)獲取一次驗證票并在一次登錄過(guò)程中反復使用這個(gè)驗證票??筛碌臅?huì )話(huà)票據(session tickets)替代了pass-through authenticatio(不知道怎么翻譯)。
通過(guò)使用Kerberos協(xié)議,在網(wǎng)絡(luò )連接的一端都可以驗證網(wǎng)絡(luò )另一端的聲明是它自己的實(shí)體。雖然NTLM允許服務(wù)器驗證客戶(hù)端的身份,但是它沒(méi)有提供客戶(hù)端驗證服務(wù)端身份的功能,也沒(méi)有提供服務(wù)器驗證另一個(gè)服務(wù)器身份的功能。NTLM被設計為假設服務(wù)器都是真實(shí)的網(wǎng)絡(luò )環(huán)境,Kerberos則沒(méi)有這個(gè)假設。
協(xié)議標準
Kerberos身份驗證協(xié)議幾十年前起源于麻省理工學(xué)院,是由“Athena”項目的工程師開(kāi)發(fā)的。第一個(gè)公開(kāi)發(fā)行的版本是Kerberos版本4。在被廣泛的使用后,協(xié)議的開(kāi)發(fā)者發(fā)布了Kerberos第五版本。
Kerberos V5現在成為IETF的標準,Windows Server 2003中Kerberos V5的實(shí)現嚴格的遵循了RFC 1510定義的標準,另外,Kerberos消息中的安全令牌(security tokens)的格式和機制遵循RFC 1964定義的標準。
Kerberos V5協(xié)議規定了以下機制:
l 驗證用戶(hù)身份。當一個(gè)用戶(hù)需要獲取訪(fǎng)問(wèn)一個(gè)服務(wù)器的權利,服務(wù)器需要驗證用戶(hù)的身份,考慮一個(gè)場(chǎng)景,用戶(hù)聲稱(chēng)他是,比如,Alice@tailspintoys.com。因為訪(fǎng)問(wèn)資源是基于身份關(guān)聯(lián)的許可,服務(wù)器必須確定用戶(hù)就是他自己聲稱(chēng)的用戶(hù)。
l 安全的打包用戶(hù)名,用戶(hù)名(用戶(hù)的主名,在本例中就是Alice@tailspintoys.com),和用戶(hù)的身份信任憑證(credentials)被打包在一個(gè)叫做票據(ticket)的數據結構中
l 安全的傳送用戶(hù)信任憑證。票據被加密后,Kerberos消息在網(wǎng)絡(luò )上傳送用戶(hù)的信任憑證(credentials)。
注意:
雖然Kerberos協(xié)議驗證用戶(hù)的身份,它并不授權訪(fǎng)問(wèn)。這是個(gè)重要的區別。在其他情形中的票據,象駕駛執照,就同時(shí)提供了身份和駕駛車(chē)輛的許可。Kerberos的票據僅僅用來(lái)證明這個(gè)用戶(hù)就是它自己聲稱(chēng)的那個(gè)用戶(hù)。在用戶(hù)身份得以確認后,本地的安全權限將決定給予訪(fǎng)問(wèn)權限或者拒絕訪(fǎng)問(wèn)。
Kerberos消息被多種加密密鑰加密以確保沒(méi)人能夠篡改客戶(hù)的票據或者Kerberos消息中的其他數據。
l 長(cháng)期密鑰(Long-term key)
一個(gè)密鑰(只有目標服務(wù)器和KDC知道),并用來(lái)加密客戶(hù)端訪(fǎng)問(wèn)這個(gè)目標服務(wù)器票據的密鑰。
l Client/server會(huì )話(huà)密鑰(session key)
一個(gè)短期的、單此會(huì )話(huà)的密鑰,是在用戶(hù)的身份和權限已經(jīng)被確認后由KDC建立的用于這個(gè)用戶(hù)的跟某個(gè)服務(wù)器之間的加密往來(lái)信息使用的密鑰
l KDC/用戶(hù) 會(huì )話(huà)密鑰(session key).
是KDC跟用戶(hù)共享的一個(gè)密鑰,被用于加密這個(gè)用戶(hù)跟KDC之間的消息。
Kerberos V5協(xié)議使用了對稱(chēng)加密和非對稱(chēng)加密兩種加密技術(shù)
因為大多數Kerberos的加密方式是基于只用于KDC和用戶(hù)之間或者KDC和網(wǎng)絡(luò )服務(wù)之間的密鑰,Kerberos V5被設計為采用對稱(chēng)加密,即使用同一個(gè)密鑰來(lái)加密和加密消息。
微軟的Kerberos協(xié)議實(shí)現能夠使用有限的非對稱(chēng)加密,一個(gè)私鑰/公鑰對被用于加密和解密來(lái)自客戶(hù)端或者網(wǎng)絡(luò )服務(wù)的初始驗證信息。
身份驗證防止數據包重用
Kerberos身份驗證機制建立并安全的傳送一個(gè)帶有客戶(hù)票據的信任憑證(通?;谝粋€(gè)唯一的時(shí)間戳),信任憑證是唯一并且一次使用有效。這個(gè)限制使有人獲取并重用客戶(hù)端票據或者嘗試偷取客戶(hù)的身份的可能性降到最小。
協(xié)議的擴展
Windows Server 2003實(shí)現Kerberos V5協(xié)議的擴展,這個(gè)擴展在初始身份認證時(shí)采用公鑰證書(shū)來(lái)替代常規的對稱(chēng)加密密鑰。這個(gè)改進(jìn)允許協(xié)議支持用智能卡交互登錄。公鑰身份驗證擴展是基于IETF工作組的草案協(xié)議。
身份驗證的相關(guān)技術(shù)
下圖顯示了Windows Server 2003中Kerberos身份驗證同其它技術(shù)如何配合的。依賴(lài)是客戶(hù)端或服務(wù)端應用是用戶(hù)模式(user-mode)還是核心模式(kernel-mode)的應用,他們分別使用Secur32.dll 或者Ksecdd.sys,調用SSPI跟Local Security Authority Subsystem (LSASS)通訊
下表是參與kerberos身份驗證的組件的描述
Component
Description
Kerberos.dll
被用來(lái)口令或者智能卡交互式登錄實(shí)現工業(yè)標準的協(xié)議SSP。它也是Windows 2000 和 Windows Server 2003首選的身份驗證方式。
Kdcsvc.dll
Kerberos密鑰分發(fā)中心(KDC)服務(wù),它回應客戶(hù)端票據授權票(ticket-granting tickets)的申請
Ksecdd.sys
在核心模式(kernel-mode)下用戶(hù)跟LSASS通訊的核心安全設備驅動(dòng)
Lsasrv.dll
LSA服務(wù),強制安全策略和擔當LSA安全包管理器
Secur32.dll
Secur32.dll 是在用戶(hù)模式(user mode)下實(shí)現SSPI的組件
Windows Server 2003是用SSP來(lái)實(shí)現Kerberos V5身份驗證協(xié)議,是操作系統提供的一個(gè)動(dòng)態(tài)鏈接庫(DLL),系統使用Kerberos SSP, Kerberos.dll,是身份驗證的第一選擇。在LSA為一個(gè)交互式登錄的用戶(hù)建立了一個(gè)安全的上下文,為了支持Kerberos信息的簽名和封裝,正在運行的用戶(hù)安全上下文裝載另外一個(gè)Kerberos SSP實(shí)例
因為Kerberos身份驗證協(xié)議是Windows Server 2003首選協(xié)議,所有域服務(wù)都支持Kerberos SSP,包括:
l AD活動(dòng)目錄要求使用LDAP(Lightweight Directory Access Protocol)
l 使用RPC的遠程服務(wù)或workstation management
l 客戶(hù)-服務(wù)器身份驗證
l 使用Common Internet File System/server message block (CIFS/SMB)的遠程文件訪(fǎng)問(wèn)
l 分布式文件系統管理
l IIS的intranet身份驗證
l Internet Protocol security (IPSec)的安全驗證
l 為域用戶(hù)和計算機發(fā)放證書(shū)的請求
身份驗證依賴(lài)于
本節討論和該書(shū)Kerberos身份驗證依賴(lài)項以及和他們的關(guān)系
Kerberos 身份認證依賴(lài)于客戶(hù)端功能,這些功能內建于Windows Server 2003、Windows XP、Windows 2000操作系統。如果一個(gè)客戶(hù)端、域控制器或者目標服務(wù)器運行于更早的操作系統下,那它就不天然的支持Kerberos 身份驗證。
網(wǎng)絡(luò )連通性
一旦Kerberos 身份認證發(fā)生,在客戶(hù)端、域控制器和目標服務(wù)器之間必須有TCP/IP網(wǎng)絡(luò )連接,關(guān)于TCP/IP更多的信息,參考“TCP/IP Technical Reference.”
客戶(hù)端使用全限定名fully qualified domain name(FQDN)訪(fǎng)問(wèn)域控制器,DNS必須能夠保證客戶(hù)端能夠獲得這個(gè)域控制器的地址。最好不要使用DNS主機文件,關(guān)于DNS的更多信息,參看“DNS Technical Reference.”
Kerberos 身份驗證不支持更糟的操作系統,比如Windows NT 4.0。你必須使用活動(dòng)目錄服務(wù)中的用戶(hù)和計算機,本地帳戶(hù)和Windows NT域帳戶(hù)不能被由于Kerberos 身份驗證
為了Kerberos 身份驗證能正常的發(fā)揮作用,在網(wǎng)絡(luò )中的所有域和森林使用相同的時(shí)間源以保證網(wǎng)絡(luò )中的所有計算機時(shí)間同步。一個(gè)活動(dòng)目錄域控制器擔當權威的時(shí)間源,它保證所有的域具有相同的時(shí)間。更多信息,參看“Windows Time Service Technical Reference.”
服務(wù)主體名(SPNs) 是運行在服務(wù)器上服務(wù)的唯一標識符。每一個(gè)使用Kerberos 身份驗證的服務(wù)都需要有個(gè)SPN以使客戶(hù)端能夠在網(wǎng)絡(luò )上標識這個(gè)服務(wù)。沒(méi)有正確的設置SPNs, Kerberos 身份驗證就是不可能的。