出家如初,成佛有余

基于EJBCA搭建自己的CA认证中心之EJBCA安装配置指南

Posted in Uncategorized by chuanliang on 2010/01/16

1. 概述

PKI(Public Key Infrastructure ) 即"公钥基础设施"较好地解决了Web 应用中的机密性、完整性、真实性和抗否认性等安全问题。但在Web 环境下,还必须证明公钥与其持有者之间的映射关系,并认证密钥持有者的身份。数字证书很好地解决了这个问题。同样,在分布式环境下,还应该建立起安全、有效的证书管理机制,实现证书的生成、存储、分发、吊销等操作,从而为Web 应用乃至网络通信提供必要的密钥和证书服务。公钥基础设施PKI 就是这样的一种提供安全服务的基础设施。PKI 的核心是对证书及其公/私钥对的管理。同时,PKI 也代表着一种分布式的信任模型关系,它首先要选择或定义证书格式及其操作过程,其次需要明确证书签发机构或个人之间的信任关系。

EJBCA就是这样一个针对PKI证书体系企业级的开源解决方案。它基于J2EE技术,提供了一个强大的、高性能并基于组件的CA体系。EJBCA兼具灵活性和平台独立性,能够独立使用,也能和任何J2EE应用程序集成。

2. 软件环境

操作系统:Centos 5.4

数据库:mysql 5.0

JDK:jdk 1.6

EJBCA:ejbca 3.9.3

ANT: ant 1.7.1

JBOSS:jboss 4.2.3

约定ejbca及相关软件都安装在/opt/目录下。

3. EJBCA基本架构

ejbca,数字证书,CA,RA,安全,开源

4. EJBCA的部署模式

ejbca,数字证书,CA,RA,安全,开源

完整的部署方案

EJBCA本身对负载均衡、高可用等有较好的支持,完整的部署方案描述了典型的完整的部署方案的部署形式。

ejbca,数字证书,CA,RA,安全,开源

CA与RA分离(External RA )部署模式

CA与RA分离(External RA )的部署模式,还可以退化成CA与RA部署在一起的模式,初期在安全性要求不高的情况下,基于成本及管理的方便,可以采用CA与RA一体化部署的模式。

5. JDK安装

wget http://cds-esd.sun.com/ESD6/JSCDL/jdk/6u17-b04/jdk-6u17-linux-i586.bin?AuthParam=1261744116_81ef97d958ff4f2096bbff2dd2c17e2e&TicketId=B%2Fw6lx2BRFJIShNAPVNdlwHl&GroupName=CDS&FilePath=/ESD6/JSCDL/jdk/6u17-b04/jdk-6u17-linux-i586.bin&File=jdk-6u17-linux-i586.bin

chmod 755 jdk-6u17-linux-i586.bin

./ jdk-6u17-linux-i586.bin

mv jdk-6u17-linux-i586 /opt/jdk

6. Java(TM) Cryptography Extension (JCE)安装

wget http://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/VerifyItem-Start/jce_policy-6.zip?BundledLineItemUUID=reZIBe.lWN4AAAEmJKgeYx0K&OrderID=7fhIBe.lMgUAAAEmGageYx0K&ProductID=33bACUFBf50AAAEYiO45AXuH&FileName=/jce_policy-6.zip

unzip jce_policy-6.zip

mv jce_policy-6/jce/*jar /opt/jdk/jre/lib/security/

JCE(Java密码扩展)为应用程序采用Java加密和数字签名提供了一种统一和一致的方式。如果在EJBCA中使用高强度的加密方式或者当数字证书的用户密码大于7个字符时候,必须安装JCE包,否则在ejbca中会报类似如下的错误:

Exception:

java.io.IOException: exception encrypting data – java.security.InvalidKeyException: Illegal key size

at org.bouncycastle.jce.provider.JDKPKCS12KeyStore.wrapKey(JDKPKCS12KeyStore.java:602)

at org.bouncycastle.jce.provider.JDKPKCS12KeyStore.engineStore(JDKPKCS12KeyStore.java:1108)

at java.security.KeyStore.store(KeyStore.java:1117)

at org.ejbca.ui.web.pub.CertReqServlet$RequestInstance.sendP12Token(CertReqServlet.java:574)

at org.ejbca.ui.web.pub.CertReqServlet$RequestInstance.doPost(CertReqServlet.java:273)

at org.ejbca.ui.web.pub.CertReqServlet.doPost(CertReqServlet.java:726)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)

at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)

at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoE
ndpoint.java:446)

at java.lang.Thread.run(Thread.java:619)

7. ANT安装

wget http://apache.etoak.com/ant/binaries/apache-ant-1.7.1-bin.tar.gz

unzip apache-ant-1.7.1-bin.zip

mv apache-ant-1.7.1-bin /opt/ant

8. Jboss安装

wget http://cdnetworks-kr-1.dl.sourceforge.net/project/jboss/JBoss/JBoss-4.2.3.GA/jboss-4.2.3.GA.zip

unzip jboss-4.2.3.GA.zip

mv jboss-4.2.3.GA /opt/jboss-4.2.3.GA

chmod 755 /opt/jboss-4.2.3.GA/bin/*sh

Ø 拷贝Jboss Web Service相关的包

在jdk1.6+Jboss 4.2.3组合情况下,要支持JAX-WS 2.0 apis,需要拷贝${JBOSS_HOME}/client下的如下包到${JBOSS_HOME}/lib/endorsed

jboss-jaxrpc.jar

jboss-jaxws.jar

jboss-jaxws-ext.jar

jboss-saaj.jar

jaxb-api.jar

否则会报如下错误:

setProperty must be overridden by all subclasses of SOAPMessage

并会导致jboss直接退出

参考:

http://sourceforge.net/project/shownotes.php?release_id=614346&group_id=22866

https://jira.jboss.org/jira/browse/JBWS-1439

Ø 修改jboss 端口

vi jboss-4.2.3.GA/server/default/deploy/jboss-web.deployer/server.xml,将

<Connector port="8080" address="${jboss.bind.address}"

maxThreads="250" maxHttpHeaderSize="8192"

emptySessionPath="true" protocol="HTTP/1.1"

enableLookups="false" redirectPort="8443" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true" />

修改为:

<Connector port="80" address="0.0.0.0"

maxThreads="250" maxHttpHeaderSize="8192"

emptySessionPath="true" protocol="HTTP/1.1"

enableLookups="false" redirectPort="8443" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true" />

Ø 修改启动参数

vi jboss-4.2.3.GA/bin/run.conf,修改如下:

JAVA_OPTS="-Xms1024m –Xmx1024m –server –XX:MaxPermSize=512m –XX:PermSize=256m -XX:MaxNewSize=512m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"

由于在一些平台上ejbca 3.9.3+jboss 5.0版本的组合方式在安装时候存在一些问题,推荐使用jboss 4.2.3版本。

9. Mysql安装配置

Ø 下载安装mysql安装包:

wget http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL-server-community-5.0.89-0.rhel5.i386.rpm/from/http://mirror-fpt-telecom.fpt.net/mysql/

wget http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL-client-community-5.0.89-0.rhel5.i386.rpm/from/http://mirror-fpt-telecom.fpt.net/mysql/

wget http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.10.tar.gz/from/http://gd.tuwien.ac.at/db/mysql/

rpm –ivh MySQL-server-community-5.0.89-0.rhel5.i386.rpm MySQL-client-community-5.0.89-0.rhel5.i386.rpm

tar zxvf mysql-connector-java-5.1.10.tar.gz

cp mysql-connector-java-5.1.10/mysql-connector-java-5.1.10-bin.jar /opt/jboss-4.2.3.GA/server/default/lib

Ø 创建ejbca数据库

mysql –uroot –p

create database ejbca default character set utf8;

grant all privileges on *.* to ejbca@localhost identified by ‘ejbca’;

flush privileges;

10. 环境变量配置

修改~/.bash_profile,内容如下:

export JAVA_HOME=/opt/jdk

export JBOSS_HOME=/opt/jboss-4.2.3.GA

export APPSRV_HOME=/opt/jboss-4.2.3.GA

export J2EE_HOME=/opt/jboss-4.2.3.GA

export ANT_HOME=/opt/ant

export PATH=$JAVA_HOME/bin:$PATH:$HOME/bin:$JBOSS_HOME/bin:$ANT_HOME/bin:.

export EJBCA_HOME=/opt/ejbca_3_9_3

export ANT_OPTS=-Xmx640m

11. EJBCA安装配置

wget http://downloads.sourceforge.net/ejbca/ejbca_3_9_3.zip

unzip ejbca_3_9_3.zip

mv ejbca_3_9_3 /opt/

cd /opt/ejbca_3_9_3/conf

Ø 修改ejbca.propterties配置文件

cp ejbca.properties.sample ejbca.properties

内容如下:

appserver.type=jboss

appserver.home=${env.APPSRV_HOME}

java.ver=15

ca.name=Yeeach Root CA

ca.dn=CN=Yeeach Root CA,O=Yeeach,C=CN

其他采用缺省值

Ø 修改database.properties

cp database.properties.sample database.properties

内容如下:

database.name=mysql

datasource.mapping=mySQL

database.url=jdbc:mysql://127.0.0.1:3306/ejbca?characterEncoding=UTF-8

database.driver=com.mysql.jdbc.Driver

database.username=ejbca

database.password=ejbca

Ø 修改web.properties

cp web.properties.sample web.properties

内容如下:

java.trustpassword=ejbca

superadmin.dn=CN=SuperAdmin 不要修改此处,3.9.3有bug,不能修改此处,不然登录管理界面时候报:Authorization Denied

superadmin.password=ejbca

httpsserver.hostname=*.yeeach.com

httpserver.pubhttp=80

注意:此处httpsserver.hostname=*.yeeach.com使用了所谓的通配符证书(wildcard certificates),以便能够支持对ca.yeeach.com,www.yeeach.com这样的域名都采用同一个证书。

Ø 安装ejbca

cd /opt/ejbca_3_9_3/

cp lib/bc*jar /opt/jboss-4.2.3.GA/server/default/lib/

ant bootstrap

启动jboss:/opt/jboss-4.2.3.GA/bin/run.sh&

ant install 一路回车确认完成安装,生成了CA、Jboss证书、浏览器证书。

杀掉jboss :ps -ef|grep jboss|grep -v grep|awk ‘{print $2}’|xargs kill -9

部署ejbca:ant deploy

再次启动jboss:/opt/jboss-4.2.3.GA/bin/run.sh&

修改客户端c:WINDOWSsystem32driversetchosts,配置测试域名

192.168.70.23 ca.yeeach.com

导入证书:在客户端浏览器里面导入/opt/ejbca_3_9_3/p12/superadmin.p12证书,密码默认是ejbca(在web.propterties中的superadmin.password=ejbca)

输入https://ca.yeeach.com:8443/ejbca 就可以通过web方式管理CA了

Ø 重装ejbca

在测试系统中,如果要重装ejbca,请按照如下步骤重装ejbca。

重建数据库:

mysql –uroot –p

mysql>drop database ejbca;

mysql>create database ejbca default character set utf8;

清空ejbca:

ant clean

按照前面的安装步骤重新安装ejbca

ant bootstrap

当然在生产系统中就不要轻易重新安装。

12. 导入p12格式的证书说明

下面以导入superadmin.p12为例说明p12格式的数字证书导入到客户端的过程。

1) 、双击superadmin.p12证书文件 ,出现如下画面,单击下一步

ejbca,数字证书,CA,RA,安全,开源

2)、出现如下画面选择“下一步”

ejbca,数字证书,CA,RA,安全,开源

3)、出现如下画面,输入superadmin.p12证书的密码(缺省为ejbca),然后点击“下一步”

为了安全,可以在输入私钥密码后,勾选下面的‘启用强制私钥保护’,这样当使用证书登录时,还会要求您输入密码

为了安全起见,建议不要选择“标志此密钥为可导出的。这将允许您在稍后备份或传输密钥”,以限定密钥的传播范围。

ejbca,数字证书,CA,RA,安全,开源

4)、出现如下画面,选择“根据证书类型,自动选择证书存储区” ,然后点击“下一步”

ejbca,数字证书,CA,RA,安全,开源

5)、出现如下画面,然后点击“完成”

ejbca,数字证书,CA,RA,安全,开源

6)、出现安全警告窗口,选择“是”,完成安装。

ejbca,数字证书,CA,RA,安全,开源

clip_image020

7)、安装完成后,在“受信任的根证书颁发机构”有颁发给“Yeeach Root CA“的记录“个人”中有颁发给“Yeeach Super Admin”的记录。如果没有,再次手动导入。

ejbca,数字证书,CA,RA,安全,开源

ejbca,数字证书,CA,RA,安全,开源

 

 

下载pdf版本:基于EJBCA搭建自己的CA认证中心之EJBCA安装配置指南.pdf

 

Technorati 标签: ,,,,,,

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: