摘要:基于角色的訪問控制,使角色成為信息訪問主體,可以有效地解決安全訪問問題。文章以O(shè)penPERMIS為開發(fā)原型,采用Struts框架技術(shù),設(shè)計(jì)并實(shí)現(xiàn)了RBAC中的屬性證書管理系統(tǒng),功能包括屬性證書的創(chuàng)建、編輯、驗(yàn)證、撤銷、查詢等,為將RBAC系統(tǒng)成功運(yùn)用到基于Web的應(yīng)用奠定了基礎(chǔ)。
關(guān)鍵詞:Struts框架;屬性證書管理;RBAC;訪問控制
0 引言
基于角色的訪問控制(Role Based Access Control,RBAC)是近年來訪問控制領(lǐng)域的研究熱點(diǎn)。RBAC通過引入角色概念不但降低訪問控制管理的復(fù)雜性和開銷,而且為系統(tǒng)管理員提供了比較好的實(shí)現(xiàn)安全策略的環(huán)境。目前比較成功的RBAC產(chǎn)品之一是英國Salford大學(xué)開發(fā)的PERMIS系統(tǒng),并且提供了C/S結(jié)構(gòu)的開放源——openPERMIS。
由于目前很多應(yīng)用系統(tǒng)是基于Web服務(wù)的,因此需要考慮在Web方式下RBAC的實(shí)現(xiàn)。其中,屬性證書作為RBAC模型的授權(quán)信息載體,是RBAC模型中極其重要的一環(huán),因此我們著重研究在Web方式下實(shí)現(xiàn)對(duì)屬性證書的動(dòng)態(tài)管理。
現(xiàn)代的網(wǎng)絡(luò)開發(fā)框架大都采用模型一視圖一控制(MVC)設(shè)計(jì)模式——使邏輯和描述被分開,由一個(gè)邏輯流控制器來協(xié)調(diào)來自客戶端的請(qǐng)求和服務(wù)器上將采取的行動(dòng)。這條途徑成為了網(wǎng)絡(luò)開發(fā)事實(shí)上的標(biāo)準(zhǔn)。Struts是Apache軟件基金下Jakarta項(xiàng)目的一部分,已經(jīng)是—個(gè)較為穩(wěn)定、成熟的MVC框架,因此本文以O(shè)penPERMIS系統(tǒng)為原型,研究Web方式下的屬性證書管理,采用Struts框架進(jìn)行設(shè)計(jì)與實(shí)現(xiàn),為RBAC在Web模式下的廣泛應(yīng)用打下基礎(chǔ)。
1 需求描述
屬性證書是由PMI的屬性權(quán)威機(jī)構(gòu)簽發(fā)的包含某持有者的屬性集和一些與持有者相關(guān)信息的數(shù)據(jù)結(jié)構(gòu)。由于這些屬性集能夠用于定義系統(tǒng)中用戶的權(quán)限,因此屬性證書可看作是權(quán)限信息的載體。屬性權(quán)威以數(shù)字簽名來保證實(shí)體與其權(quán)力屬性相綁定的有效性和合法性。在本文中使用PKCS#12格式的證書,進(jìn)行數(shù)據(jù)的封裝存儲(chǔ)。
通常RBAC系統(tǒng)主要分為三個(gè)功能模塊:屬性證書管理模塊(創(chuàng)建角色證書、創(chuàng)建策略證書、編輯屬性證書、驗(yàn)證屬性證書、撤銷屬性證書、查詢屬性證書六個(gè)子模塊組成);訪問控制模塊(由獲取用戶屬性證書、ADF驗(yàn)證用戶角色、AEF執(zhí)行用戶請(qǐng)求三個(gè)子模塊組成);系統(tǒng)管理模塊(由用戶管理、角色管理、資源管理和操作管理四個(gè)子模塊組成)。
屬性證書和RBAC模型信息通常會(huì)使用LDAP目錄服務(wù)器作為存儲(chǔ)數(shù)據(jù)庫。本系統(tǒng)選擇使用密歇根大學(xué)開發(fā)的OpenLDAP軟件包;OpenLDAP可以在Linux上穩(wěn)定運(yùn)行、易于配置并且有良好的編程接口。
可以將屬性證書管理模塊功能詳細(xì)分解為以下幾個(gè)方面:
創(chuàng)建屬性證書用戶選擇適當(dāng)?shù)膶傩宰C權(quán)威源(sOA)后提交證書版本號(hào)、序列號(hào)、有效期、頒發(fā)者ID、屬性信息、PKCS#12文件的訪問密碼、存儲(chǔ)DN等必要信息,由系統(tǒng)生成屬性證書并保存到LDAP上。
編輯屬性書(策略與角色)用戶選擇SOA及證書存儲(chǔ)DN,系統(tǒng)列出該DN中所有的屬性證書,用戶從證書列表中選擇證書進(jìn)行編輯。
驗(yàn)證屬性證書用戶選擇SOA、證書存儲(chǔ)DN及PKCS#12文件的訪問密碼后,系統(tǒng)列出此DN下的所有屬性證書,用戶從證書列表中選擇證書進(jìn)行驗(yàn)證。驗(yàn)證分為兩步,分別對(duì)屬性證書的簽名和有效期進(jìn)行驗(yàn)證。
查詢屬性證書用戶選擇SOA及證書存儲(chǔ)DN,系統(tǒng)列出該DN中所有的屬性證書,用戶從證書列表中選擇證書查看其內(nèi)容。
撤銷屬性證書對(duì)于一些過期或簽名無效的證書,系統(tǒng)提供撤銷功能。用戶選擇SOA、證書存儲(chǔ)DN、PKCS#12文件訪問密碼,系統(tǒng)列出該DN下所有的屬性證書,用戶選擇屬性證書進(jìn)行撤銷,撤銷后LDAP將不再保存該證書信息。
2 屬性證書類圖與APl包
2.1屬性證書類圖
在OpenPERMIS原型系統(tǒng)中屬性證書遵循X.509協(xié)議規(guī)定的ASN.1編碼證書格式,因此證書的每個(gè)字段類都繼承ASNlType接口。
根據(jù)RFC3281中對(duì)屬性證書的ASN.1語法定義,屬性證書主要由三部分組成:屬性證書主體信息、簽名算法標(biāo)識(shí)符和簽名值。其中主體信息又包括證書版本號(hào)、持有者、頒發(fā)者、有效期、屬性信息、擴(kuò)展等信息,而持有者信息又分baseCertificateID結(jié)構(gòu)模式、entityName結(jié)構(gòu)模式與OhjectDigestlnfo結(jié)構(gòu)模式,頒發(fā)者類型根據(jù)版本不同又可分為V1Form與V2Form。經(jīng)過源碼分析,我們得到了圖1表示的各字段之間的類圖關(guān)系。
圖1 屬性證書的類圖關(guān)系
2.2底層API包
OpenPERMIS開發(fā)包內(nèi)提供了底層API供我們引用(見表1),此外我們還增加了一些自定義的包以便系統(tǒng)調(diào)用。其中OpenPERMIS提供了對(duì)屬性證書進(jìn)行操作的工具,IAIK提供了證書編碼及簽名算法的工具。
表1 OpenPERMS底層API包
出于Web開發(fā)的需要,我們?cè)谙到y(tǒng)中自定義了一些包以便自身的調(diào)用(見表2)。
表2 自定義包
3 基于Struts框架的屬性證書管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
Struts framework是MVC模式的體現(xiàn):從視圖角度,主要可由JSP建立,struts自身包含了一組可擴(kuò)展的自定義標(biāo)簽庫,可以簡(jiǎn)化創(chuàng)建用戶界面的過程;從模型角度,主要是表示一個(gè)系統(tǒng)的狀態(tài),在Struts中,系統(tǒng)的狀態(tài)主要由ActiomFormBean體現(xiàn),這些狀態(tài)是非持久性的;從控制器角度主要是AcfionServlet,但是對(duì)于業(yè)務(wù)邏輯的操作則主要由Action、ActionMapping、ActionForward這幾個(gè)組件協(xié)調(diào)完成。在這部分我們結(jié)合struts框架給出了屬性證書管理系統(tǒng)中的主要模塊的設(shè)計(jì)與實(shí)現(xiàn)代碼。
3.1屬性證書的創(chuàng)建
屬性證書中角色證書存儲(chǔ)用戶角色信息,策略證書存儲(chǔ)所有資源的訪問控制規(guī)則,是整個(gè)訪問控制模塊的決策依據(jù)。我們?cè)O(shè)計(jì)實(shí)現(xiàn)的創(chuàng)建證書流程,主要分以下幾步:
(1)選擇適當(dāng)SOA,由SOA確定PKCS#12文件。PKCS#12中包含用于簽名的私鑰。
(2)從參數(shù)中獲取證書的相關(guān)信息來設(shè)置版本號(hào)、序列號(hào)、有效期、頒發(fā)者ID和擴(kuò)展信息。
(3)設(shè)置屬性信息:從參數(shù)中獲取屬性信息,包括一個(gè)或多個(gè)屬性的Vector對(duì)象。屬性由屬性類型和屬性值組成,其中屬性值也是包括一個(gè)以上值的Vector對(duì)象。
(4)從參數(shù)中獲取PKCS#12文件的文件名和訪問密碼,從PKCS#12文件中獲取頒發(fā)者信.息、簽名算法和私鑰。
(5)根據(jù)前面獲取的基本信息建立屬性證書的主體字段AttributeCertificatelnfo,并對(duì)其進(jìn)行DER編碼。
(6)根據(jù)第4步獲得的簽名算法和私鑰對(duì)DER編碼后的attributeCertificatelnfo進(jìn)行簽名。
(7)根據(jù)未經(jīng)過DER編碼的主體字段AttributeCertificatelnfo、簽名算法和主體字段AttributeCertificatelnfo的簽名值建立屬性證書AC結(jié)構(gòu)AttributeCertificate,并對(duì)其進(jìn)行DER編碼。
(8)將證書保存到LDAP相應(yīng)的DN下。
根據(jù)上述流程的描述,我們從MVC角度給出創(chuàng)建角色證書子模塊的描述:
(1)視圖角度,見表3。
3.2屬性證書的編輯
編輯屬性證書的過程與創(chuàng)建屬性證書的過程有點(diǎn)類似,不同的是編輯屬性證書模塊證書的各個(gè)字段都已賦值,用戶只需修改相應(yīng)字段即可。在保存的過程中,創(chuàng)建屬性證書模塊向LDAP的相應(yīng)DN下增加屬性證書,而編輯屬性證書模塊則替換原有的屬性證書。
編輯屬性證書流程主要分以下幾步:
(1)選擇合適的SOA,一個(gè)SOA對(duì)應(yīng)一個(gè)PKCS#12文件,通過PKCS#12文件判斷此證書是否由該SOA簽發(fā)。
(2)選擇屬性證書所在的DN,獲得證書列表。
(3)從證書列表中選取要編輯的屬性證書。
(4)系統(tǒng)顯示所選證書內(nèi)容,用戶進(jìn)行修改操作。
(5)從證書簽發(fā)者的PKCS#12文件中獲取簽發(fā)者信息、簽名算法和私鑰。
(6)根據(jù)前面獲取的基本信息建立屬性證書的主體字段AttributeCertificatelnfo,并對(duì)其進(jìn)行DER編碼。
(7)根據(jù)第5步獲得的簽名算法和簽發(fā)者的私鑰對(duì)DER編碼后的AttributeCertificatelnfo進(jìn)行簽名。
(8)根據(jù)主體字段AttributeCertificatelnfo、簽名算法signatureAlgorithm和主體字段AttributeCertificatelnfo的簽名值型signatureValue建立屬性證書AC結(jié)構(gòu)AttributeCertificate,并對(duì)其進(jìn)行DER編碼。
(9)替換原有證書。
3.3屬性證書的驗(yàn)證
屬性證書的驗(yàn)證可分為兩步,第一步為驗(yàn)證屬性證書的簽名,即驗(yàn)證屬性證書的合法性。第二步為驗(yàn)證屬性證書的有效期。其實(shí)現(xiàn)的步驟有:
(1)選擇合適的SOA,一個(gè)SOA對(duì)應(yīng)一個(gè)PKCS#12文件,即由SOA決定用于驗(yàn)證的公鑰。
(2)通過PKCS#12訪問密碼訪問PKCS#12文件。從PKCS#12證書包內(nèi)取得密鑰對(duì)。
(3)密鑰對(duì)進(jìn)行自我驗(yàn)證以判斷密鑰是否匹配。
(4)從密鑰對(duì)里取得公鑰證書驗(yàn)證證書簽名有效性。
(5)從證書主體字段中獲得有效期。
(6)將有效期與當(dāng)前日期進(jìn)行比較以判斷證書是否過期。
(7)返回驗(yàn)證結(jié)果。
3.4屬性證書的撤銷
證書的撤銷需要提供PKCS#12及訪問密碼,通過驗(yàn)證屬性證書來判斷此證書是否為該SOA簽發(fā)。如果驗(yàn)證沒有通過則拒絕撤銷操作。證書的撤銷是一個(gè)替換的過程,而不是簡(jiǎn)單的刪除工作,簡(jiǎn)單的刪除操作會(huì)把相應(yīng)DN下所有的證書都刪除掉。所以我們的解決方案是:從LDAP相應(yīng)的DN下獲得證書列表,取得要撤銷的證書,用一個(gè)Vector數(shù)據(jù)結(jié)構(gòu)保存剩余的屬性證書,再用此Vector替換原DN下所有的屬性證書。
綜合以上分析給出屬性證書撤銷的流程,主要分以下幾步。
(1)選擇合適的SOA,一個(gè)SOA對(duì)應(yīng)一個(gè)PKCS#12文件,通過PKCS#12文件判斷此證書是否由該SOA簽發(fā)。
(2)選擇屬性證書所在的DN,獲得證書列表。
(3)從證書列表中選取要撤銷的證書。
(4)用Vector構(gòu)造剩余證書列表。
(5)用Vector中證書列表替換DN下證書列表。
4 結(jié)束語
本文在分析OpenPERMIS開源代碼基礎(chǔ)上,基于Struts框架,進(jìn)行了屬性證書管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。文中主要描述了屬性證書的類圖和相關(guān)的API包提供基礎(chǔ)的支持,詳細(xì)介紹了屬性證書的創(chuàng)建,編輯,驗(yàn)證和撤消模塊的處理流程和代碼實(shí)現(xiàn)。本文所描述的是基于RBAC信息系統(tǒng)的Web實(shí)現(xiàn)的屬性證書管理模塊,能夠?yàn)橛脩舻慕巧芾硖峁┓奖?,為RBAC在Web系統(tǒng)上的應(yīng)用提供了關(guān)鍵支持,已經(jīng)投入使用。
本文提出并實(shí)現(xiàn)了基于struts框架的屬性證書系統(tǒng),可以進(jìn)行基于Web方式的屬性證書管理,有利于RBAC在Web上的部署與實(shí)現(xiàn)。
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。