吳潔明,史建宜
(北方工業大學 信息工程學院,北京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.