吴洁明,史建宜
(北方工业大学 信息工程学院,北京100144)
随着数字信息化的迅速发展,信息交互越来越依赖网络。网络使得信息交换效率显著提高的同时,人们也渐渐的意识到信息安全交换的重要性。信息安全技术的发展和完善成为人们的普遍诉求。认证中心 (certificate authority,CA)是目前使用最为普遍的一种信息安全技术。通常,CA作为可信的第三方机构出现,通过对网络活动参与者的密钥进行授权认证的形式保证网络服务的安全。但是,作为一个相对独立的模块,在应用系统开发过程中,CA并不能得到很有效的使用。
目前,CA系统的技术已经相对成熟,而且有许多开源的 CA 系统可供参考,EJBCA (enterprise Java bean certificate authority)就是其中之一,它是一个实现了所有CA功能的系统软件[1]。为了提高CA服务的方便性和高效性,EJBCA引入了 Web Service技术。自3.4版本开始,EJBCA提供了符合JAX-WS 2.0规范的 Web Service接口,使得EJBCA的使用更加方便和灵活。
EJBCA的基本定义请参见文献 [2]。
EJBCA具有以下特点:建立在J2EE规范之上;支持多个CA和多级CA;可以单独运行,也可以与任何J2EE的应用程序集成;安装和配置十分简单;有强大的基于Web的管理界面;支持个人证书申请和证书的批量生产;服务端和客户端证书能够采用PKCS12、JKS或者PEM格式导出。
EJBCA的基本结构包括认证中心CA、注册中心 (regi-stration authority,RA)、轻量级目录访问协议 (lightweight directory access protocol,LDAP)和数据库等。EJBCA 的基本结构如图1所示。
图1 EJBCA基本结构
(1)认证中心 (CA):提供验证用户证书申请、签发证书、定义和发布证书失效列表、响应用户证书吊销请求等功能。
(2)注册中心 (RA):相当于CA的一个代理结构,RA提供证书申请的登记和审计工作,同时还产生、验证和分发密钥。
(3)证书查询验证服务器 (LDAP):LDAP是一个存储仓库,主要是用来存储用户的证书信息。
(4)数据库:保存用户信息,CA信息,用户证书信息以及作废证书信息,存储日志信息和统计信息[3]。
在此次搭建过程中,选择的操作系统是Ubuntu。另外,还用到了一些软件和工作包,分别是:EJBCA、JBOSS、MySQL、JDK、ANT、JDBC驱动 (mysql-connector-java)。这里只简述EJBCA环境搭建的基本过程:
(1)下载以上的安装包,将JDK、ANT、JBOSS、EJBCA的安装包进行解压缩,并安装到/opt目录下。
(2)通 过 apt-get install 命 令 安 装 MySQL, 并 在MySQL中为EJBCA创建相应的数据库,这是为后期生成证书做好准备工作。
(3)把这些软件的安装路径配置到环境变量中,即配置到/etc/profile文件中。
(4)配置EJBCA属性文件ejbca.properties,此文件位于%EJBCA_HOME%/conf目录下,其中%EJBCA_HOME%代表EJBCA的安装路径。
(5)启动JBOSS服务,并构建EJBCA。
至此,最基本的EJBCA环境就搭建完成了。
在配置EJBCA Web Service之前,需要做一些准备工作。如下所述:
(1)EJBCA环境搭建:参见1.3EJBCA搭建。
(2)证书生成:在配置EJBCA属性文件过程中,会配置证书相应的信息。这样在EJBCA构建过程中,会自动生成一系列证书,并将证书的相关信息存储到MySQL数据库中。构建过程中,将生成3个证书,分别是tomcat.jks、truststore.jks和superadmin.p12。其中tomcat.jks是服务器端的证书,truststore.jks是验证客户端证书的证书库,superadmin.p12是客户端浏览器的证书。
(3)客户端安装证书:将生成的superadmin.p12证书导出,并导入到客户端浏览器中。
(4)安全协议访问EJBCA服务:以JOBSS作为 Web服务器,通过Https安全访问协议和8443端口,访问EJBCA服务。
经过以上的一系列的前期准备工作,我们可以以安全模 式 访 问 https://ca.yeeach.com:8443/ejbca (其 中ca.yeeach.com为本地配置的域名)。这样,就可以以web方式对CA进行管理。访问EJBCA服务时数字证书信息如图2所示,web方式管理CA的界面如图3所示。
图3 web方式管理CA的界面
Web Service是一种面向服务的体系结构 (service oriented architecture,SOA)技术,通过标准的Http协议提供服务,目的是保证不同平台的应用服务可以互操作、互访问。现在,越来越多的网络应用提供商都提供 Web Service服务,并且Web Service已经得到了广泛的认可和使用。
在使用 EJBCA Web Service之前需要对 Ejbca Web Service行为和JAX-WS的一些选项进行配置。这些配置信息位于%EJBCA _HOME%/conf/jaxws.properties文件中。修改jaxws.properties文件,在 Web service(jaxws)configuration配置项下,需要配置非常重要的一项:ejbcaws.enabled。
(1)ejbcaws.enabled =true:当 发 布 EJBCA 服务到JBOSS的时候,会发布EJBCA Web Service服务。
(2)ejbcaws.enabled=false:当发布 EJBCA 服务到JBOSS的时候,不会发布EJBCA Web Service服务,默认配置为false。
其它配置项在JAXWS settings下,我们可以根据自己的具体需求进行配置。在配置完成后,需要重新发布EJBCA,这些配置信息才会生效。
配置 Web Service命令行界面 (command line interface,CLI),是为了使用户可以通过命令行的方式访问EJBCA Web Service所提供的各种服务接口。
配置步骤如下:
(1)进入%EJBCA_HOME%/dist/ejbca-ws-cli目录。
(2)编辑ejbcawsracli.properties文件,修改ejbcawsracli.url为你访问EJBCA Web Service服务的路径,在此配置的访问路径为https://ca.yeeach.com:8443/ejbca/ejbcaws/ejbcaws。
(3)在配置Web Service时需要一个P12或JKS的密码库,我们可以使用在安装过程中生成的supderadmin.p12密码库或者重新生成一个JKS密码库。在此,我们选择使用supderadmin.p12 来 对 ejbcawsracli.keystore.path 进 行 配置, 配 置 为 ejbcawsracli.keystore.path= ../../p12/superadmin.p12。
经过以上一系列的配置,当我们启动JBOSS之后,JBOSS将发布Web Service服务,我们可以通过web浏览器 访 问 Web Service 服 务 地 址 https://ca.yeeach.com:8443/ejbca/ejbcaws/ejbcaws?wsdl。Web 服 务 描 述 语 言(web services description language,WSDL)是 描 述 协 助Web服务者和Web服务消费者之间交互的网络服务标准。它主要为用户提供详细的服务接口说明。WSDL中非常重要的一项信息是SOAP:Address。我们可以看到此处EJBCA发布的WSDL文件中的SOAP:Address如下:<soap:address location ="http://localhost:8080/ejbca/ejbcaws/ejbcaws"/>。与我们访问 Web Service服务的地址不相符,下面我们将对SOAP:Address进行配置,最终使它们所使用的地址达成一致。配置过程如下:
(1)进入%JBOSS_HOME%/server/default/
deployers/jbossws.deployer/ META-INF 目 录, 其中%JBOSS_HOME%代表JBOSS的安装路径。
(2)修改jboss-bean.xml文件:
现在,分别对以上所修改的4个属性,进行详细的介绍。
(1)webServiceHost:配置SOAP Address中的IP地址。JBOSS支持重写SOAP Address,如果这个 webServiceHost没有配置,JBOSS Web Service将使用所发送的请求来重写这个SOAP Address。
(2)modifySOAPAddress:当 modifySOAPAddress设置为TRUE时,如果SOAP Address是一个有效的URL,JBOSSWS将不重写这个SOAP Address。如果SOAP Address是一个无效的URL,JBOSSWS将使用webService-Host所配置的信息来重写SOAP Address。
(3)webServiceSecurePort:安全访问 Web Service所使用的端口,此处设置为8443。
(4)webServicePort:访问 Web Service的默认端口,默认为8080。配置webServiceSecurePort和webServicePort来明确定义端口,都是为了重写SOAP Address做准备。
经过以上的配置,在发布的WSDL文件中,我们将看到SOAP Address的地址为 <soap:address location="http://ca.yeeach.com:8080/ejbca/ejbcaws/ejbcaws" />。由此可以看到我们的配置信息起到了一定的作用。
如上所述我们把ejbcaws.enabled设置为true,这就使得JBOSS每次启动的时候,都会发布EJBCA Web Service,重新生成一个WSDL文件。JBOSS会把这个WSDL文件生成到%JBOSS _HOME%/server/default/data/wsdl/ejbca.ear/ejbcaws-ejb.jar目录下,文件名为EjbcaWSService序号 .wsdl,例如:EjbcaWSService3950455733930732592.wsdl。编辑此 WSDL文件,修改文件最后的SOAP Address,修改前SOAP Address为:
<soap:address location="http://ca.yeeach.com:8080/ejbca/ejbcaws/ejbcaws"/>
修改后SOAP Address为:
<soap:addresslocation="https://ca.yeeach.com:8443/ejbca/ejbcaws/ejbcaws"/>。
经过以上修改,Ejbca Web Service的 Web访问地址和WSDL文件中的SOAP Address就一致了,均为https://ca.yeeach.com:8443/ejbca/ejbcaws/ejbcaws?wsdl,分 别如图4和图5所示。至此,对EJBCA Web Service的配置就结束了。
访问EJBCA Web Service有两种方式,第一种是通过Web Service CLI,这种方式是采用命令行交互的方式对Web Service进行访问。另外一种方式是,将EJBCA Web Service的jar包引入到项目中,在项目中直接访问EJBCA Web Service。针对以上两种方法,下面将给出具体的实现方法。
我们在安装EJBCA的Ubuntu系统下,简单使用命令行的方式来访问Ejbca Web Service。在2.3中,我们讲解了如何配置 Web Service CLI。配置 Web Service CLI,就是为了使用户可以通过命令行的方式来访问EJBCA Web Service所提供的各种服务接口。要使用EJBCA Web Service的话,除了需要按照2.3中进行配置之外,还需要将%JBOSS_HOME%/common/lib目录下的jar包
拷贝到%JBOSS_HOME%/lib/endorsed目录下。使用 Web Service CLI,需要进入%EJBCA _HOME%/dist/目录下,执行ejbca-ws-cli脚本。
在Linux下要实现的实例是,获得用户名为tomcat的用户证书信息。其所执行的命令和运行结果如图6所示。图6中,框一是所执行的Web Service CLI命令,其作用是访问Web Service中的finduser服务,寻找用户名为tomcat的用户证书。框二是执行命令之后,在MYSQL数据库中所找到的对应用户证书,并显示此用户证书的一些基本信息。
图6 Linux实例
在Windows系统下,要实现的实例与Linux下的相似,是获得用户名中包含 “tomcat”字符串的用户证书。我们选择Java作为开发语言,开发环境选择MyEclipse。在开发过程中,需要用到一些jar包,这些jar包全部都可以从%EJBCA _HOME%/dist/ejbca-ws-cli 和%EJBCA _HOME%/dist/ejbca-ws-cli/lib目录下找到。主要用到的jar包有3个,分别是:
实例部分重要的代码截图如图7所示。
图7 Windows实例部分重要代码
第 (1)行:安装BouncyCastle提供者。
第 (2)行:访问EJBCA Web Service服务的地址。
第 (3)-(4)行:通过安全协议 Https访问 WebService所需要的证书信任库和相应的密码。
第 (5)行:设置证书库类型,此处设置为PKCS#12。
第 (6)-(7)行:设置存储证书公钥、私钥等信息的证书库和此库对应的密码。
第 (8)-(11):创建使用 EJBCA Web Service所需要的对象,包括QName、EjbcaWSService和EjbcaWS。
第 (12)行:创建UserMatch对象,用来寻找用户证书。
第 (13)行:寻找用户证书的时候,所需要匹配的变量是用户名 (USERNAME)。
第 (14)行:匹配的方式是包含 (CONTAINS)。
第 (15)行:匹配值是tomcat。即:寻找用户名中包含 “tomcat”的用户证书信息。
程序运行结果如图8所示。输出从数据库中找到的用户证书的基本信息。
图8 Windows实例运行结果
EJBCA是一款优秀的、免费的CA系统软件,它可以实现对证书的管理。在开发过程中使用EJBCA,可以起到简化证书管理的作用。它所提供的Web Service服务,主要作用是提供所有关于证书管理的服务接口,通过它可以将CA很便捷的融入到应用系统开发过程中。
综上所述,可以得出这样一个结论。当需要开发一个应用系统,并且这个应用系统采用CA技术来保障和提高它的安全性,可以选择EJBCA来实现CA的所有功能,并使用EJBCA Web Service服务将CA融入到应用系统中。这样的一种开发方式,大大降低了使用CA系统的开发成本,并且非常的灵活和方便。
本文简单的介绍了EJBCA的相关知识及其安装过程,详细的讲述了EJBCA Web Service的配置过程,最后在Linux和Window系统下,对EJBCA Web Service进行了实践。
[1]CHEN Weichuan.Implementation and optimization of certificate status query system based on EJBCA [J].China Computer&Communication,2009 (12):81-83 (in Chinese).[陈伟川.基于EJBCA的证书状态查询系统的实现与优化[J].信息与电脑,2009 (12):81-83.]
[2]ZHOU Cheng.LIU Dianting.The CA systems research and implementation based on EJBCA [J].Guangxi Journal of Light Industry,2009 (12):70-71 (in Chinese).[周诚.刘电霆.基于EJBCA的CA系统的研究与实现 [J].广西轻工业,2009(12):70-71.]
[3]ZHOU Bishui,ZHANG Lei.Research of EJBCA on WPKI environment [J].Computer Engineering and Design,2005,26(8):2100-2102 (in Chinese).[周 必 水, 张 磊.EJBCA 在WPKI体系中的应用研究 [J].计算机工程与设计,2005,26(8):2100-2102.]
[4]DUAN Huiliang.The CA system applied research based on EJBCA [J].Network Security,2008 (7):81-82 (in Chinese).[段辉良.基于EJBCA的CA系统的应用研究 [J].网络安全,2008 (7):81-82.]
[5]LIU Bo,LIU Zhigui,REN Lixue.The implementation and design of PKI authentication system on scoring system [J].Computer Security,2010 (51):83-85 (in Chinese). [刘博,刘知贵,任立学.PKI认证技术在阅卷系统中的应用与实现[J].计算机安全,2010 (51):83-85.]
[6]NI Yi.Research on JBoss-based Integration of Web service and communication service [J].Communications Technology,2011,12 (44):121-124 (in Chinese).[倪奕.基于JBoss实现 Web服务于通信业务整合 [J].通信技术,2011,12 (44):121-124.]
[7]JING Jiwu,LIN Jingqiang,FENG Dengguo.PKI technoloy[M].Beijing:Science Press,2008 (in Chinese).[荆继武,林璟锵,冯登国.PKI技术 [M].北京:科学出版社,2008.]
[8]YAN Hailong,YAN Qiao,FENG Jiqiang,et al.Research on standard system for mutual trust and mutual recognition base on PKI/CA in E-government [J].Journal of Shenzhen University Science and Engineering,2012,29 (3):113-117 (in Chinese).[颜海龙,闫巧,冯级强,等.基于PKI/CA互信互认体系的电子政务 [J].深圳大学学报理工版,2012,29(3):113-117.]
[9]HOU Meifang,FENG Mei.Design of identity authentication and access control platform based on PKI [J].Microcomputer Information,2012,28 (1):132-134 (in Chinese).[候梅芳,冯梅.基于PKI的身份认证与访问控制平台的设计 [J].微计算机信息,2012,28 (1):132-134.]
[10]EJBCA:READM.TXT [EB/OL].http://www.ejbca.org/,2012.
[11]EJBCA:EJBCA-DESIGN.TXT [EB/OL].http://ejbca.sourceforge.net,2012.