基于Struts的属性证书系统设计与实现

时间:2022-08-19 09:11:51

基于Struts的属性证书系统设计与实现

摘要:基于角色的访问控制,使角色成为信息访问主体,可以有效地解决安全访问问题。文章以OpenPERMIS为开发原型,采用Struts框架技术,设计并实现了RBAC中的属性证书管理系统,功能包括属性证书的创建、编辑、验证、撤销、查询等,为将RBAC系统成功运用到基于Web的应用奠定了基础。

关键词:Struts框架;属性证书管理;RBAC;访问控制

0 引言

基于角色的访问控制(Role Based Access Control,RBAC)是近年来访问控制领域的研究热点。RBAC通过引入角色概念不但降低访问控制管理的复杂性和开销,而且为系统管理员提供了比较好的实现安全策略的环境。目前比较成功的RBAC产品之一是英国Salford大学开发的PERMIS系统,并且提供了C/S结构的开放源――openPERMIS。

由于目前很多应用系统是基于Web服务的,因此需要考虑在Web方式下RBAC的实现。其中,属性证书作为RBAC模型的授权信息载体,是RBAC模型中极其重要的一环,因此我们着重研究在Web方式下实现对属性证书的动态管理。

现代的网络开发框架大都采用模型一视图一控制(MVC)设计模式――使逻辑和描述被分开,由一个逻辑流控制器来协调来自客户端的请求和服务器上将采取的行动。这条途径成为了网络开发事实上的标准。Struts是Apache软件基金下Jakarta项目的一部分,已经是―个较为稳定、成熟的MVC框架,因此本文以OpenPERMIS系统为原型,研究Web方式下的属性证书管理,采用Struts框架进行设计与实现,为RBAC在Web模式下的广泛应用打下基础。

1 需求描述

属性证书是由PMI的属性权威机构签发的包含某持有者的属性集和一些与持有者相关信息的数据结构。由于这些属性集能够用于定义系统中用户的权限,因此属性证书可看作是权限信息的载体。属性权威以数字签名来保证实体与其权力属性相绑定的有效性和合法性。在本文中使用PKCS#12格式的证书,进行数据的封装存储。

通常RBAC系统主要分为三个功能模块:属性证书管理模块(创建角色证书、创建策略证书、编辑属性证书、验证属性证书、撤销属性证书、查询属性证书六个子模块组成);访问控制模块(由获取用户属性证书、ADF验证用户角色、AEF执行用户请求三个子模块组成);系统管理模块(由用户管理、角色管理、资源管理和操作管理四个子模块组成)。

属性证书和RBAC模型信息通常会使用LDAP目录服务器作为存储数据库。本系统选择使用密歇根大学开发的OpenLDAP软件包;OpenLDAP可以在Linux上稳定运行、易于配置并且有良好的编程接口。

可以将属性证书管理模块功能详细分解为以下几个方面:

创建属性证书用户选择适当的属性证权威源(sOA)后提交证书版本号、序列号、有效期、颁发者ID、属性信息、PKCS#12文件的访问密码、存储DN等必要信息,由系统生成属性证书并保存到LDAP上。

编辑属性书(策略与角色)用户选择SOA及证书存储DN,系统列出该DN中所有的属性证书,用户从证书列表中选择证书进行编辑。

验证属性证书用户选择SOA、证书存储DN及PKCS#12文件的访问密码后,系统列出此DN下的所有属性证书,用户从证书列表中选择证书进行验证。验证分为两步,分别对属性证书的签名和有效期进行验证。

查询属性证书用户选择SOA及证书存储DN,系统列出该DN中所有的属性证书,用户从证书列表中选择证书查看其内容。

撤销属性证书对于一些过期或签名无效的证书,系统提供撤销功能。用户选择SOA、证书存储DN、PKCS#12文件访问密码,系统列出该DN下所有的属性证书,用户选择属性证书进行撤销,撤销后LDAP将不再保存该证书信息。

2 属性证书类图与APl包

2.1属性证书类图

在OpenPERMIS原型系统中属性证书遵循X.509协议规定的ASN.1编码证书格式,因此证书的每个字段类都继承ASNlType接口。

根据RFC3281中对属性证书的ASN.1语法定义,属性证书主要由三部分组成:属性证书主体信息、签名算法标识符和签名值。其中主体信息又包括证书版本号、持有者、颁发者、有效期、属性信息、扩展等信息,而持有者信息又分baseCertificateID结构模式、entityName结构模式与OhjectDigestlnfo结构模式,颁发者类型根据版本不同又可分为V1Form与V2Form。经过源码分析,我们得到了图1表示的各字段之间的类图关系。

图1 属性证书的类图关系

2.2底层API包

OpenPERMIS开发包内提供了底层API供我们引用(见表1),此外我们还增加了一些自定义的包以便系统调用。其中OpenPERMIS提供了对属性证书进行操作的工具,IAIK提供了证书编码及签名算法的工具。

表1 OpenPERMS底层API包

出于Web开发的需要,我们在系统中自定义了一些包以便自身的调用(见表2)。

表2 自定义包

3 基于Struts框架的属性证书管理系统设计与实现

Struts framework是MVC模式的体现:从视图角度,主要可由JSP建立,struts自身包含了一组可扩展的自定义标签库,可以简化创建用户界面的过程;从模型角度,主要是表示一个系统的状态,在Struts中,系统的状态主要由ActiomFormBean体现,这些状态是非持久性的;从控制器角度主要是AcfionServlet,但是对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成。在这部分我们结合struts框架给出了属性证书管理系统中的主要模块的设计与实现代码。

3.1属性证书的创建

属性证书中角色证书存储用户角色信息,策略证书存储所有资源的访问控制规则,是整个访问控制模块的决策依据。我们设计实现的创建证书流程,主要分以下几步:

(1)选择适当SOA,由SOA确定PKCS#12文件。PKCS#12中包含用于签名的私钥。

(2)从参数中获取证书的相关信息来设置版本号、序列号、有效期、颁发者ID和扩展信息。

(3)设置属性信息:从参数中获取属性信息,包括一个或多个属性的Vector对象。属性由属性类型和属性值组成,其中属性值也是包括一个以上值的Vector对象。

(4)从参数中获取PKCS#12文件的文件名和访问密码,从PKCS#12文件中获取颁发者信.息、签名算法和私钥。

(5)根据前面获取的基本信息建立属性证书的主体字段AttributeCertificatelnfo,并对其进行DER编码。

(6)根据第4步获得的签名算法和私钥对DER编码后的attributeCertificatelnfo进行签名。

(7)根据未经过DER编码的主体字段AttributeCertificatelnfo、签名算法和主体字段AttributeCertificatelnfo的签名值建立属性证书AC结构AttributeCertificate,并对其进行DER编码。

(8)将证书保存到LDAP相应的DN下。

根据上述流程的描述,我们从MVC角度给出创建角色证书子模块的描述:

(1)视图角度,见表3。

编辑属性证书的过程与创建属性证书的过程有点类似,不同的是编辑属性证书模块证书的各个字段都已赋值,用户只需修改相应字段即可。在保存的过程中,创建属性证书模块向LDAP的相应DN下增加属性证书,而编辑属性证书模块则替换原有的属性证书。

编辑属性证书流程主要分以下几步:

(1)选择合适的SOA,一个SOA对应一个PKCS#12文件,通过PKCS#12文件判断此证书是否由该SOA签发。

(2)选择属性证书所在的DN,获得证书列表。

(4)系统显示所选证书内容,用户进行修改操作。

(5)从证书签发者的PKCS#12文件中获取签发者信息、签名算法和私钥。

(6)根据前面获取的基本信息建立属性证书的主体字段AttributeCertificatelnfo,并对其进行DER编码。

(7)根据第5步获得的签名算法和签发者的私钥对DER编码后的AttributeCertificatelnfo进行签名。

(8)根据主体字段AttributeCertificatelnfo、签名算法signatureAlgorithm和主体字段AttributeCertificatelnfo的签名值型signatureValue建立属性证书AC结构AttributeCertificate,并对其进行DER编码。

(9)替换原有证书。

3.3属性证书的验证

属性证书的验证可分为两步,第一步为验证属性证书的签名,即验证属性证书的合法性。第二步为验证属性证书的有效期。其实现的步骤有:

(1)选择合适的SOA,一个SOA对应一个PKCS#12文件,即由SOA决定用于验证的公钥。

(2)通过PKCS#12访问密码访问PKCS#12文件。从PKCS#12证书包内取得密钥对。

(3)密钥对进行自我验证以判断密钥是否匹配。

(4)从密钥对里取得公钥证书验证证书签名有效性。

(5)从证书主体字段中获得有效期。

(6)将有效期与当前日期进行比较以判断证书是否过期。

(7)返回验证结果。

3.4属性证书的撤销

证书的撤销需要提供PKCS#12及访问密码,通过验证属性证书来判断此证书是否为该SOA签发。如果验证没有通过则拒绝撤销操作。证书的撤销是一个替换的过程,而不是简单的删除工作,简单的删除操作会把相应DN下所有的证书都删除掉。所以我们的解决方案是:从LDAP相应的DN下获得证书列表,取得要撤销的证书,用一个Vector数据结构保存剩余的属性证书,再用此Vector替换原DN下所有的属性证书。

综合以上分析给出属性证书撤销的流程,主要分以下几步。

(1)选择合适的SOA,一个SOA对应一个PKCS#12文件,通过PKCS#12文件判断此证书是否由该SOA签发。

(2)选择属性证书所在的DN,获得证书列表。

(3)从证书列表中选取要撤销的证书。

(4)用Vector构造剩余证书列表。

(5)用Vector中证书列表替换DN下证书列表。

4 结束语

本文在分析OpenPERMIS开源代码基础上,基于Struts框架,进行了属性证书管理系统的设计与实现。文中主要描述了属性证书的类图和相关的API包提供基础的支持,详细介绍了属性证书的创建,编辑,验证和撤消模块的处理流程和代码实现。本文所描述的是基于RBAC信息系统的Web实现的属性证书管理模块,能够为用户的角色管理提供方便,为RBAC在Web系统上的应用提供了关键支持,已经投入使用。

本文提出并实现了基于struts框架的属性证书系统,可以进行基于Web方式的属性证书管理,有利于RBAC在Web上的部署与实现。

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

上一篇:机房无人化管理的上机卡设计 下一篇:C/C++语言程序中函数调用解决办法