一种将认证中心与业务系统整合方案
2014-10-15吴洁明史建宜李硕征
吴洁明,史建宜,李硕征
(北方工业大学信息工程学院,北京100144)
0 引言
公钥基础设施(PKI)是国际上解决开放式互联网络信息安全要求的一套体系。PKI体系支持身份认证,信息传输、存储的完整性,消息传输、存储的机密性,以及操作的不抵赖性。PKI的核心就是CA(认证中心)。
CA认证技术是保障通信网络安全性的重要手段,它是以PKI为基础。现阶段,PKI/CA技术被广泛应用到各种应用系统中。它是唯一能同时解决身份认证、访问控制、信息保密和不可抵赖性的安全技术。其中,身份认证功能是整个PKI/CA的核心[1-2]。
身份认证是安全技术的一个十分重要的方面,它也是保障业务系统安全性的第一道关卡,只有实现了合法有效的身份认证,才能对用户进行访问控制,一旦身份认证系统被攻破,系统的安全性设置就形同虚设[3-4]。
目前,很多业务系统都希望实现更加坚固有效的身份认证。现阶段,大部分业务系统使用简单相等身份验证的方式,对用户进行访问控制,但是这种方式存在安全漏洞。如果将CA与业务系统进行整合,可以大大提高用户身份认证的安全性。目前,国内出现了很多CA认证中心,比如:北京数字认证股份有限公司。现在越来越多的业务系统使用这种第三方的CA认证中心,来提高业务系统的安全性。但是,如果在业务系统中使用这类CA认证中心,需要占用很大份额的开发经费。并且,随着市场竞争越来越激烈,在整个业务系统开发过程中,都在尽量降低开发成本。因此,中小型企业对于在业务系统中使用第三方收费的CA身份认证中心,变得望而却步。
针对以上这种情况,本文提出了一种用开源的、免费的CA认证中心,代替收费的第三方CA认证中心,与中小型企业开发的业务系统进行整合实现有效的身份认证的方案,这种方案经济实惠、可行性强,同时可以增强业务系统的安全性。
1 背景知识
1.1 EJBCA
EJBCA是本方案实施的理论研究基础。EJBCA是一个基于J2EE技术的企业级的PKI证书颁发机构。EJBCA由CA、RA(注册中心)、数据库、CRL(证书撤销列表)和LDAP(轻量级目录服务器)组成,其中CA是EJBCA的核心组成部分。EJBCA是一个功能齐全的、免费的、开源的CA认证中心[5]。
1.2 EJBCA Web Service配置
EJBCA自从3.4版本之后,提供Web Service服务,在安装EJBCA时,需要通过配置来使EJBCA发布Web Service服务。成功发布Web Service服务之后,就可以很方便地访问EJBCA Web Service提供的各种服务,这有利于将EJBCA与业务系统更好地、更方便地整合到一起。
在搭建EJBCA环境时,使用的操作系统是 Windows,EJBCA版本是3.9,此版本可以提供Web Service服务。MySQL作为保存CA信息的数据库,证书发布服务器使用的是开源的OpenLDAP,运行EJBCA的应用服务器是JBOSS,版本为5.0.1。
此处简述EJBCA中配置和发布Web Service的过程:
(1)启用 EJBCA Web Service:在%EJBCA_HOME%confjaxws.properties文件中,配置 jbcaws.enabled项,将其设置为true。此设置表示将EJBCA部署到JBOSS时,发布EJBCA Web Sercvice服务。其中,%EJBCA_HOME%代表的是EJBCA的安装路径。
(2)部署EJBCA:在%EJBCA_HOME%in下,执行ant deploy。执行完毕后,EJBCA将成功部署到JBOSS应用服务器上。
(3)启用JBOSS:在%JBOSS_HOME%in下,执行run.bat,即启动JBOSS的服务。启动成功后,用户可以通过浏览器访问EJBCA的服务。其中,%JBOSS_HOME%代表的是JBOSS的安装路径。
(4)配置域名:在hosts文件中,为EJBCA服务配置域名,添加一项:localhost ca.ejbca.com。此项表示当访问域名ca.ejbca.com时,其对应的实际IP地址就是本地IP。
(5)修改WSDL文件:在%JBOSS_HOME%serverdefaultdatawsdlejbca.earejbca-ws-ejb.jar目录下,存放的是EJBCA Web Service所对应的WSDL文件,每次启动JBOSS,都会重新发布一个新的WSDL文件。本文修改最新生成的WSDL文件,配置其中的soap:address项,配置如下:<soap:address location="https://ca.ejbca.com:8443/ejbca/ejbcaws/ejbcaws"/>。
经过以上步骤,就完成了EJBCA的搭建和配置工作,EJBCA所能提供的主要功能结构如图1所示,主要功能结构及描述如下。
图1 EJBCA功能结构图
(1)MySQL数据库:数据库是整个EJBCA的基础。CA认证中心的各种数据,CA信息、证书信息、CRL信息、用户信息、各种操作的日志信息都将存储到MySQL数据库中。
(2)RA注册中心:RA注册中心相当于整个EJBCA的门户。普通用户通过浏览器可方便地进行用户证书申请、证书文件下载、证书信息查看、证书状态查询等操作。管理员通过浏览器可以对用户和用户证书进行管理,主要包括添加、删除、查看、修改、撤销等。
(3)CA认证中心:CA认证中心是整个EJBCA的核心和精髓之处。它的主要工作就是负责证书的签发和认证。EJBCA能够很好地支持多级CA,可以根据实际的需要在ROOTCA下面生成多级SUBCA。从而,实现更好的CA认证中心服务。
(4)JBOSS应用服务器:JBOSS应用服务器为整个EJBCA提供了运行空间。EJBCA所能提供的所有服务都将在JBOSS上运行,用户通过JBOSS对服务进行访问。
(5)OpenLDAP:LDAP是一个目录服务器,也被称为证书发布服务器,主要功能是提供目录浏览服务,负责将RA注册中心传送过来的证书信息加入到此服务器上。用户可以通过访问LDAP服务获得数字证书信息和CRL证书撤销列表信息。EJBCA是开源的、免费的。所以,此处与EJBCA配合使用的LDAP,选择使用了免费的OpenLDAP服务器。
(6)业务系统:此业务系统主要是需要整合CA认证功能的业务系统。业务系统可以通过JBOSS来访问EJBCA所提供的各种服务,实现与EJBCA的交互,实现CA的身份认证,从而提高业务系统安全性[6-8]。
2 EJBCA与业务系统整合方案
2.1 编码申领业务系统
本文通过编码申领业务系统介绍EJBCA同业务系统整合的方案。
编码申领业务系统主要是基于B/S架构,实现音像制品的申报、审核、发码。每个编码将唯一标志一个音像制品,为了确保编码能够实现其本身代表的意义,需要提高业务系统的安全性,确保只有真实有效的用户才可以正常地登录到系统,进行音像制品编码的申领工作。只有这样,针对此音像制品发放的编码,才具有实际的意义。
此编码申领系统在安全性方面有一定的要求,但是客户又希望尽量降低开发成本。为了同时满足客户在这两方面的要求,使用EJBCA来实现CA身份认证功能。在使用基本的权限访问控制保障业务系统安全性的基础之上,将EJBCA的功能与此业务系统进行整合。为此编码申领系统定制了一个符合它需求的、功能齐全的CA认证中心。
使用这套整合方案,既能提高业务系统的安全性,又能大大地降低系统开发成本,可行性和实施性好,经济实用。
2.2 EJBCA与编码申领业务系统整合
EJBCA与业务系统整合方案的整合过程中,主要活动分为如下3部分:
(1)用户申请数字证书:每个在编码申领业务系统中的用户,需要到EJBCA中的RA用户注册中心,申领自己的数字证书。
(2)制作数字证书:用户申请证书的信息,经过CA中心的RA审核人员的审核,将把数字证书对应的证书密码,以邮件的形式返还给申请用户。用户以用户名和证书密码,到EJBCA网站进行证书文件下载。此时,可以购买USB-KEY,本文使用的是飞天诚信的USB-KEY,通过它提供的证书导入工具,将证书文件导入到USB-KEY中。
(3)用户登录:为了提高编码申领系统的安全性,在用户登录的时候,首先对用户名和密码进行判断,判断通过;随后,对用户的USB-KEY的有效性进行验证,验证通过;最后,通过使用用户输入的USBKEY密码读取用户证书信息,通过EJBCA Web Service在线判断当前数字证书的有效性。从而可以实现用户身份认证,大大提高系统的安全性。
EJBCA与业务系统整合方案的整体流程图,如图2所示。
具体流程分析及描述如下:
第(1)步:用户申请证书。编码申领业务系统中的用户,需要到EJBCA申领自己的数字证书。用户访问EJBCA网站,在RA注册中心填写并提交用户证书申请信息,等待审核。
图2 整合流程的整体流程图
第(2)步:审核用户证书申请。EJBCA中有RA审核角色的用户,此RA用户将对用户的证书申请进行审核。审核通过,此用户证书文件对应的密码将以邮件的形式发给用户,此密码是随机的4位数字,密码的长度可以通过在EJBCA的用户注册模板中进行配置,比如:可以是长度为6或8的随机数字等;审核不通过,用户将变成失败状态。
第(3)步:下载用户证书。用户收到邮件后,访问EJBCA网站,可以进行用户证书文件下载,下载时可以选择生成证书密钥的长度,主要有1 024和2 048两种长度。证书有pfx、pem、cer等格式,可以根据具体需要进行配置。
第(4)步:用户证书导入USB KEY。每个生产USB KEY的公司,一般都会提供相应的证书导入工具。使用所购买的USB KEY公司提供的导入工具,将下载的用户证书文件导入到USB KEY中。
第(5)步:用户名、密码判断。用户登录编码申请业务系统时,需要输入用户名、密码、USB KEY密码。首先需要对用户输入的用户名和密码进行判断,判断数据库中是否存在对应用户。
第(6)步:USB KEY验证。根据用户输入的USB KEY密码,读取证书信息,需要对证书的有效性、时间是否在有效期内等信息进行简单的判断。
第(7)步:证书是否撤销。调用EJBCA Web Service中的证书撤销状态查询服务,判断证书当前的撤销状态,从而能检测出用户证书当前处在什么状态,是有效状态还是撤销状态。
2.3 具体实现过程
在将EJBCA整合到编码申领业务系统的过程中,主要包括3步:用户申请数字证书、制作数字证书、登录系统。其中,前两步主要体现了如何使用EJBCA;第3步主要体现了业务系统如何与EJBCA Web Service服务进行信息交互。因此,此处详细介绍用户登录部分。
用户登录具体可以分为3步:
(1)用户名和密码判断,主要是查找对应的用户名和密码的用户在数据库中是否存在。
(2)使用用户输入的USB-KEY的密码,读取USB-KEY中的证书信息,对证书进行简单的有效性判断,主要包括判断证书是否有效、是否在证书有效期内。主要代码如下:
(Ⅰ)Certificate[]certs=keyStore.getCertificateChain(keyAlias);
(Ⅱ)X509Certificate x509Certificate=(X509Certificate)certs[0];
(Ⅲ)x509Certificate.checkValidity();
(Ⅳ)x509Certificate.checkValidity(date)。
第(Ⅰ)行:查看与给定别名关联的证书链。
第(Ⅱ)行:取出第一个证书。
第(Ⅲ)行:验证证书目前是否有效。
第(Ⅳ)行:检查证书目前是否处于有效期内。
(3)证书撤销判断,使用EJBCA Web Service所提供的证书撤销状态服务,查询此证书是否已经被撤销。主要代码[8-9]如下:
(Ⅰ)ejbcaraws=getEjbcaWS();
(Ⅱ)RevokeStatus revokeStatus=ejbcaraws.checkRevokationStatus(
x509Certificate.getIssuerX500Principal().toString(),
x509Certificate.getSerialNumber().toString(16));
(Ⅲ)XMLGregorianCalendar xmlGregorianCalendar=
revokeStatus.getRevocationDate();
(Ⅳ)GregorianCalendar gregorianCalendar=
xmlGregorianCalendar.toGregorianCalendar();
(Ⅴ)SimpleDateFormat simpleDateFormat=
new SimpleDateFormat("yyyy-MM-dd");
(Ⅵ)String dateTimeString=simpleDateFormat.
format(gregorianCalendar.getTime());
(Ⅶ)if(!"1970-01-01".equals(dateTimeString))flag=false;
(Ⅷ)Integer reason=revokeStatus.getReason();
(Ⅸ)if(!reason.equals(-1))flag=false。
第(Ⅰ)行:初始化EJBCA Web Service服务,得到EjbcaWS对象ejbcaraws。
第(Ⅱ)行:调用EJBCA Web Service中的checkRevokationStatus()服务,得到此证书的当前撤销状态。
第(Ⅲ)行:从RevokeStatus(证书撤销状态)对象中,取出证书撤销时间。
第(Ⅳ)~(Ⅵ)行:时间格式转换。将XMLGregorianCalendar格式的证书撤销时间,最终转换成“yyyy-MM-dd”格式的、字符串类型的证书撤销时间。
第(Ⅶ)行:每个证书默认的证书撤销时间为格林威治标准时间(世界时)。如果撤销时间与格林威治标准时间(1970-01-01)不相同,说明证书被撤销,现在处于撤销状态,把flag设置为false。
第(Ⅷ)行:取出证书撤销原因的状态。
第(Ⅸ)行:每个证书默认的证书撤销原因的状态为“-1”,此状态代表证书没有撤销。如果证书被撤销,此属性将被设置为相应的撤销原因。如果撤销原因状态与“-1”不相等,说明证书被撤销,现在处于撤销状态,把flag设置为false。
当所有验证过程执行完毕,flag仍然为true。此时,说明此用户为真实有效的合法用户,用户身份认证成功,用户可以成功登录到编码申领系统,进行制品申报等业务操作了[9-11]。
2.4 结果分析
现阶段,普通的业务系统进行的都是简单相等验证,即实际用户名和密码哈希值的简单相等验证。此验证方法实质上就是判断用户和密码哈希值是否匹配。针对每一个用户,每次验证时在网络上传输的用户名和密码都是一样的,这是一个安全漏洞。
将EJBCA的CA身份认证功能添加到编码申领业务系统中,在简单相等身份验证的基础之上,添加了一层CA的身份认证。CA认证是十分安全可靠的,从而大大提高了业务系统的身份认证安全。
在经济效益方面,一个业务系统想要使用第三方CA认证中心,需要增加很多费用,包括CA认证服务器购置的费用;制作CA证书的费用;CA证书维护费用等,仅仅是以上几项,大致需要几十万元,这使得很多业务系统对于CA认证都望而却步。
本方案中,使用免费的、企业级的、功能齐全的EJBCA实现CA认证中心。客户只需要花费一定量的费用购买USB KEY即可,此部分费用大致几百元到几千元。本方案为业务系统提供相同级别的安全,却大大降低了费用。
3 结束语
互联网的飞速发展,给人们生活带来方便的同时,也带来很多安全方面的隐患。越来越多的业务系统希望提高安全性,但是,又很顾忌使用第三方CA认证中心带来的巨大开销。所以,本文提出使用开源的、免费的CA认证中心——EJBCA。针对业务系统的具体需求,搭建自己的CA认证中心。这种方式灵活性非常强,比如:用户不需要通过LDAP查看证书信息和证书撤销列表,在整个EJBCA中就可以不搭建LDAP部分。通过配置EJBCA Web Service服务,使得业务系统可以十分方便地与EJBCA进行信息交互,实现用户的身份认证,从而得以保障业务系统的身份认证的安全性。而且,使用EJBCA所产生的费用,相对来说是十分低廉的。
下一步主要有两项工作:第一,实现EJBCA的多级CA,这样更加有利于实现对用户证书权限的控制;第二,业务系统结合CA实现更加安全可靠的用户身份认证。在此基础之上,希望可以结合其他信息安全方面的技术,对业务系统中需要在网络间传输的数据进行安全操作。比如,实现制品申报数据的数字签名、多人数字签名、数字信封等功能。从而,进一步提高业务系统的安全性。
[1]颜海龙,喻建平,胡强,等.基于PKI/CA的分布式跨域信任平台研究与实现[J].计算机工程与设计,2013,34(2):686-690.
[2]钱晓捷,赵亚涛,宋兵.容忍入侵的CA方案设计与实现[J].计算机工程与设计,2011,32(10):3262-3265.
[3]颜海龙,闫巧,冯级强,等.基于PKI/CA互信互认体系的电子商务[J].深圳大学学报:理工版,2012,29(3):113-117.
[4]张虎强,洪佩林,李津生,等.用户名密码认证方案的安全性分析及解决方案[J].计算机工程与应用,2006(33):102-106.
[5]陈勤,凌青山,丁宏.安全CA实例—EJBCA的研究[J].计算机工程与设计,2005,26(12):3222-3224.
[6]王代,陈长海,熊允发.公安大学PKI/PMI身份认证与授权访问系统分析[J].中国人民公安大学学报:自然科学版,2012(1):49-52.
[7]刘博,刘知贵,任立学.PKI认证技术在阅卷系统中的应用与实现[J].计算机安全,2010(5):83-85.
[8]吴鹏,王晓峻,苏新宁.基于PKI/PMI的Web应用安全解决方案[J].计算机工程与应用,2006(6):1-3.
[9]徐歆恺,梁军.巧用CAPICOM进行安全通信[J].计算机与网络,2009(18):53-55.
[10]周志刚,徐芳,肖晓华,等.在Java中进行数字签名的一种实现方法[J].科学技术与工程,2006,6(17):2752-2754.
[11]张青凤,张凤琴.CryptoAPI在基于数字证书身份认证系统中的应用[J].现代计算机,2011(10):28-31.