摘 要:針對Browser/Artifact方式進行單點登錄時存在的安全性問題,設計出一種基于SAML與XKMS的安全單點登錄認證模型。它采用一種結合傳統PKI與XML密鑰管理規范(XKMS)的統一密鑰管理子層來提供密鑰管理,使用XML數字簽名和加密技術來保證SAML聲明傳遞的安全性。通過在J2EE平臺上實現,證明了該模型可以很好地解決Browser/Artifact方式傳遞SAML聲明存在的安全性問題。
關鍵詞:單點登錄; 安全聲明標記語言; XML密鑰管理規范; XML數字簽名; XML加密; Web服務
中圖分類號:TP393 文獻標志碼:A
文章編號:1001-3695(2010)03-1019-03
doi:10.3969/j.issn.1001-3695.2010.03.058
Research and implementation of security SSO authentication model based on SAML and XKMS
CHEN Tian-yu1, XIE Dong-qing1,2, YANG Xiao-hong1, YANG Hai-tao1
(1.College of Software, Hunan University, Changsha 410082, China; 2.School of Computer Science Educational Software, Guangzhou University, Guangzhou510006, China)
Abstract:For the security problem existing in the process of SSO which used Browser/Artifact mode, this paper designed a security SSO authentication model based on SAML and XKMS. It used a key management layer which combined traditional PKI with XKMS to provide the key management service, at the same time, this model applied XML digital signature technology and XML encryption technology to ensure the security of sending SAML statement message. Through the implementation on the platform of J2EE,the result proves that the security SSO model can be a very good solution to the security problem in the deli-very of SAML statement by Browser/Artifact mode.
Key words:SSO; SAML; XKMS; XML digital signature; XML encryption; Web service
隨著企業信息化進程的不斷深化、電子商務的不斷發展,人們在企業活動中需要接觸的應用系統越來越多。這些系統各自維護著不同的安全策略,使用獨立的認證授權體系,用戶被迫保持多個身份,從而導致孤立的業務關系和用戶體驗。消除這種訪問孤立的關鍵是建立一種聯合身份。建立聯合身份、實現聯合商務需要實施一種標準化的、跨管理域的、基于Web架構的通用技術。單點登錄就是一個Web服務用來向另一個Web服務傳達有關用戶認證信息的技術。安全聲明標記語言SAML通過定義聯合識別、驗證和授權的基本形式為單點登錄的實現提供了技術框架[1~3]。但是SAML對于自身的安全性問題卻沒有相關的解決方案,本文主要通過結合XKMS和XML數字簽名和加密來解決SAML聲明傳遞的安全性問題。
1 SAML技術
1.1 SAML介紹
SAML是由OASIS組織高級結構化信息標準組織批準,基于XML語言的,用于在多個信任合作者之間傳輸認證和授權信息的安全訪問控制框架體系和協議[1]。SAML的核心是聲明,目前共定義了三種聲明:認證聲明,定義了用戶的認證信息;屬性聲明,定義了相關的屬性信息;授權聲明,定義了對特定資源的授權信息。SAML還定義了一組XML格式的請求/應答消息。三種聲明可以嵌入請求/應答消息中進行傳遞[1~3]。
SAML提供了Artifact和Post兩種基于瀏覽器的方式來傳遞聲明消息[1,2]。Browser/Artifact提供的是一種由目的站點從源站點pull的聲明獲取方式。Post方式提供的是一種由源站點從目的站點push的聲明獲取方式。由于目前業界主要使用的是Browser/Artifact方式[1,2],本文主要介紹這種獲取聲明的方式。
1.2 Browser/Artifact方式
Browser/Artifact方式認證的具體過程如圖1所示。
1)用戶U向IDP(認證服務提供商)發送認證請求,要求訪問IDP,U和IDP之間的消息傳遞不包含認證信息的消息傳遞。
2)IDP通過對U認證后,生成一個認證聲明,同時建立對應的SAML Artifact,然后將此Artifact返回給用戶。
3)用戶被重定向到SP(服務提供商),與SP建立連接,并將Artifact傳遞給SP。
4)SP根據Artifact查詢IDP。
5)IDP根據對應關系將聲明返回SP,并刪除聲明與Artifact之間的對應關系。
6)SP通過聲明判斷用戶身份,如是合法用戶則將頁面返回給用戶;如是非法用戶則返回錯誤信息。
1.3 Browser/Artifact安全性分析
1)截取SAML Artifact和聲明 攻擊者作為代理人,在用戶U與IDP或IDP與SP之間的通信中冒充其中一方,實現欺騙。在此過程中,攻擊者可以輕松獲取用戶、IDP和SP之間的所有數據,包括SAML Artifact和SAML聲明[2,4]。
2)拒絕服務攻擊 SAML協議比較容易遭受拒絕服務DoS攻擊。這是因為服務器端處理一個SAML請求時,首先需要從請求信息的XML DOM樹中提取相關信息,然后從數據庫或文件中查詢相應請求數據的結果來構造應答消息,這需要花費很多時間。而客戶端構造請求消息卻簡單得多。這使得攻擊者可重復發送請求消息,從而造成服務器擁塞、崩潰,使正常的請求服務無法進行[2,4]。
3)竄改消息 中間人截取SAML Artifact或者SAML聲明后,可以竄改其中的內容。
4)重放攻擊 攻擊者冒充用戶不斷發送重復的應答消息達到重放攻擊目的。
隨著單點登錄技術的發展快速,傳統的安全保護技術方法已經不能勝任,如何傳遞安全可信SAML聲明成為單點登錄中必須解決的關鍵問題。由于SAML聲明是基于XML的,自然而然會想到使用基于XML數字的簽名[5,6]和加密[6]來解決SAML聲明安全性問題。XML數字簽名以保證發送方身份的確認性和不可抵賴性,以保護數據的完整性。XML的加密方法是為了保證數據的私密性。關于XML簽名和加密將在接下來部分詳細介紹。
2 XML數字簽名和加密
2.1 XML數字簽名
XML數字簽名是一種安全協議,其目的是為了保護數據的完整性,采用公共密鑰機制(PKI),通過私鑰加密消息摘要實現數字簽名,通過公鑰解密驗證數字簽名[5~7]。
2.2 XML加密
XML加密采用了對稱算法和非對稱算法,前者用于XML數據元素的批量加密,后者用于交換對稱密鑰[6]。但是數字簽名和加密時用的密鑰要依賴于PKI,而PKI的實現比較復雜。為了解決這個問題,這里提出了一種新的替代方案,即XKMS。 XKMS為訪問和集成公鑰PKI擬出了一種容易的機制。
3 XKMS
3.1 XKMS兩種規范
XKMS規范由兩個規范組成,其中一個規范與公鑰的注冊有關,即XML 密鑰注冊服務規范(XML key registration service specification,XKRSS)。這一部分為將密鑰對注冊到服務提供程序提供機制。另一個規范關心的是基于密鑰信息的信息檢索,即XML 密鑰信息服務規范(XML key information service specification,XKISS)[8]。這一部分為允許客戶機應用程序認證經過加密/簽名的數據提供機制。
3.2 基于XKMS的密鑰管理子層描述
傳統PKI有著完善的功能和結構,但是其部署十分繁瑣,文中給出了一個基于XKMS的密鑰管理層,將XML與傳統PKI進行了結合,很好地屏蔽了傳統PKI部署的復雜性,使用戶不必理解復雜的PKI體系結構,方便地使用PKI提供的密鑰服務。基于XKMS的密鑰管理層結構如圖2所示。
對于XKMS 的客戶端來說,若客戶端是一個密鑰的所有者,那么它可以通過XKRSS向XKMS服務提供商注冊它的密鑰,而XKMS服務器則利用一個底層的PKI來保存和綁定密鑰。在整個安全Web 服務調用過程中,基于XKMS的管理層都將提供密鑰管理服務,Web服務調用端在對Web服務的安全調用之前必須將生成的密鑰對注冊到XKMS服務,Web 服務提供者在驗證調用者簽名之前必須先到XKMS服務對調用者提供的公鑰信息進行有效性驗證。服務調用者和提供者可能在同一個XKMS服務安全域內,也可能在不同的XKMS服務安全域內[8]。
4 安全單點登錄認證模型的提出與實現
根據前文的分析,本章提出了一種結合XML數字簽名、加密技術以及XKMS系統來保證SAML聲明和Artifact的安全傳遞的安全單點登錄模型。該模型中使用XML數字簽名技術讓發送方提供SAML消息簽名,保證數據的完整性[5~7],同時使用XML加密技術來加密SAML Artifact和SAML聲明,保證消息私密性[6],為了保證XML簽名加密過程中密鑰的安全性,使用XKMS來管理密鑰[8]。SAML Artifact傳遞的安全性和聲明傳遞的安全性都可以通過這種模型來解決。下面以解決SAML聲明傳遞的安全性為例來詳細分析這種單點登錄認證模型的簽名和加密過程。接下來會詳細分析整個單點登錄過程。以下的發送方為IDP,接收方為SP,具體說明請參考圖1。
4.1 發送方生成SAML數字簽名過程
1)發送方生成RSA密鑰對,公鑰和私鑰 其中公鑰在XMKS服務注冊處進行注冊,私鑰用來生成SAML數字簽名;
2)發送方的原始消息經過SHA-1生成散列消息;
3)利用RSA私鑰和生成的散列消息生成SAML數字簽名;
4)公鑰、原始消息和SAML數字簽名組成簽名消息。
4.2 發送方加密SAML聲明過程
1)接收方首先產生非對稱密鑰,公鑰和私鑰,把公鑰在XKMS服務處注冊,然后發送給發送方;
2)發送方收到公鑰后到XKMS服務處進行驗證;
3)驗證成功后生成一對對稱密鑰;
4)利用對稱密鑰加密需要加密的SAML消息;
5)用接收方的公鑰加密對稱密鑰;
6)把加密后的SAML聲明和加密后的公鑰組成加密消息。
簽名消息和加密消息嵌入SOAP頭部發送給接收方。
發送方生成SAML簽名和加密SAML聲明的詳細過程如圖3所示。
4.3 接收方驗證SAML數字簽名過程
1)接收方收到SAML簽名消息和加密的SAML聲明消息,首先驗證數字簽名,驗證通過才繼續解密加密的聲明消息;
2)利用SAML簽名消息中的原始消息進行SHA-1散列得到散列消息;
3)到XKMS服務處通過XKISS驗證發送方發過來的公鑰;
4)驗證通過后用該公鑰解密SAML數字簽名得到散列消息;
5)匹配生成的散列消息和解密后的散列消息;
6)若匹配則說明數據是完整的,沒有竄改,否則就直接結束,解密過程不再進行。
4.4 接收方解密SAML聲明過程
1)簽名驗證通過后用自己的私鑰解密發過來的對稱密鑰;
2)用對稱密鑰解密SAML加密聲明得到SAML原始聲明。
接收方驗證SAML簽名和解密SAML聲明消息如圖4所示。
4.5 認證模型的實現
整個單點登錄模型主要由五個部分組成,即身份認證服務、SAML響應服務、XKMS服務、XML數字簽名和加密、單點登錄管理模塊。其中前三個都是Web service。整個系統以J2EE為開發平臺,以TOMCAT作為Web容器,AXIS作為SOAP引擎[9]。改進后的Browser/Artifact方式單點登錄認證流程如圖5所示。
1)用戶U向IDP(認證服務提供商)發送認證請求,要求訪問IDP,U和IDP之間的消息傳遞不包含認證信息;
2)IDP通過對U認證后,生成一個認證聲明,同時建立對應的SAML Artifact,然后將此Artifact加密同時生成一個簽名返回給用戶;
3)用戶重定向XKMS服務處驗證密鑰;
4)XKMS服務返回驗證消息;
5)用戶確認Artifact后重定向到SP,與SP建立連接,并將重新加密的Artifact和簽名后傳遞給SP;
6)SP到XKMS服務處驗證密鑰;
7)XKMS服務返回驗證消息;
8)SP確認Artifact后建立了一條到IDP的安全通道,重新加密Artifact并生成簽名發給IDP查詢聲明;
9)IDP到XKMS服務處驗證密鑰;
10)XKMS服務返回驗證消息;
11)IDP確認Artifact后根據對應關系將聲明加密,同時生成簽名返回SP,并刪除聲明與Artifact之間的對應關系;
12)SP驗證通過后通過聲明判斷用戶身份,如是合法用戶則將頁面返回給用戶;如是非法用戶則返回錯誤信息。
表1 單點登錄認證模塊
模塊核心程序名稱實現功能及說明
身份認證服務login() 驗證用戶名和密碼類:UserService.java
SAMLmakeSaml()產生SAML聲明,并返回
響應Artifact
服務appendArtifact()在目標Web服務資源URL上附加Artifact
samlReceive()接收目標站點的SAML請求,提取Artifact信息
assertRetrival()通過Aritifact檢索對應SAML聲明
samlResponse()發送SAML聲明類:SamlService.java
XKMS服務xkrss()xkiss()注冊密鑰驗證密鑰類:XkmsService.java
XML數字簽名和加密smlSignature()xmlValidate()xmlEncrypt()xmlDecrypt()產生XML數字簽名驗證XML數字簽名加密XML文檔解密XML文檔
單點登錄管理模塊artifactReceive()samlRequest()assertReceive()說明:java se6 xml api 獲取用戶的Artifact向源發送身份驗證請示驗證SAML聲明并授權
4.6 新型單點登錄認證模型與傳統模型的比較
新型單點登錄認證模型在原有模型的基礎上,引入了XML數字簽名和加密技術來保證聲明的安全傳遞,同時引入XKMS密鑰管理子系統來提供密鑰管理服務。對于第1章提到的使用Browser/Artifact方式來傳遞SAML聲明時存在的安全性問題都可以使用這種新型模型來解決。對于安全問題1)截取SAML Artifact和聲明,在新型模型中可以采用XML加密保證端到端安全,防止中間人攻擊,同時可以使用時間戳來保證不接受過期的聲明。對于安全問題2)拒絕服務攻擊,在新型模型中可以使用XML數字簽名來解決。要求發送方進行數字簽名,這樣發送請求消息的難度增加,從而減少發送與接收消息時發送端與接收端工作量的不對稱性,減少受到拒絕服務攻擊的可能。對于安全問題3)竄改消息,在新型模型中也可以使用XML簽名來保證數據的完整性。對于安全問題4)重放攻擊,則可以使用時間戳保證數據的實時性。該新型模型增強了Browser/Artifact方式傳遞SAML聲明的安全性,同時實現起來也并不復雜。
5 結束語
文中針對Browser/Artifact方式傳遞SAML聲明過程中存在的安全性問題,介紹和研究了XML數字簽名和加密以及XKMS技術,并且提出XKMS密鑰管理子層模型。文中最后結合SAML、XKMS 、XML簽名和加密設計出一種新型的安全的單點登錄認證模型,該安全模型很好地解決了Web服務環境下SAML聲明傳遞的安全性問題,為實施安全單點登錄應用提供了一個有效的解決方案。
下一步,筆者將研究在該單點登錄認證模型的基礎上結合LDAP(輕量級目錄服務協議),實現用戶的統一管理和認證,為大規模的系統集成應用中的安全身份認證提供支持。
參考文獻:
[1]OASIS Final SAML v2.0 OASIS standard project[EB/OL].[2005-03-15]. http://www.peoject.org/.
[2]THOMAS Gro (β). Security analysis ofthe SAML single sign-on browser/artifact profile[C]//Proc of the 19th Annual Computer Security Applications Conference.Washington DC:IEEE Computer Society, 2003.
[3]FUGKEAW S, MANPANPANICH P, JUNTAPREMJITT S. Adding SAML to two-factor authentication and single sign-on model for dynamic access control[J]. Communications Signal Processing, 2007,6(10):1-5.
[4]王秀毅,王凌燕,韓繼紅,等.一種SAML單點登錄實現方式的安全性研究[J]. 微計算機信息, 2007, 23 (8):81-83.
[5]XML signature[EB/OL].[2005-05] .http://www.w3.org/2005-05.
[6]劉小覽,許敏佳. 基于XML的網絡安全技術[J]. 計算機工程, 2006,32(2):164-166.
[7]車葵,邢書濤,牛曉太. 基于XML的數字簽名技術研究與實現[J]. 計算機工程與設計, 2008,29(23):6171-6174.
[8]陳莉,張浩軍,祝躍飛.基于XKMS的三層網絡結構的PKI系統模型[J]. 計算機工程與應用, 2006,42(14):68-71.
[9]張艷,周明天,佘壟. 基于Web services的XML引擎安全模型研究[J]. 計算機應用研究, 2008, 25(7):2162-2164.