安装基于EJBCA的SSL证书签发系统


前言

EJBCA是可以实现签发自签证书并且提供证书验证(CRL,OCSP)的开源项目,主要实现了CAB论坛的BR基准和ADOBE的基准以及一些RFC协议。
一般来说只有CA机构才会使用到,这里记录下EJBCA的安装。官方提供了docker的形式安装(以后测试安装)。

参考文献

EJBCA官网:https://www.ejbca.org/
EJBCA官方文档:https://doc.primekey.com/ejbca6152/ejbca-installations/ejbca-main-installation/application-servers/wildfly-10-jboss-eap-7-0
CAB论坛:https://cabforum.org/
EJBCA帮助论坛:https://sourceforge.net/p/ejbca/discussion/123123/

环境和版本信息

EJBCA:社区版6.15.2.1
中间件:wildfly-10.0.0.Final
系统:Centos7.2 内存:4G(虚拟机)
Ant:1.10.7
JDK:1.8

 

前置属性

默认java,ant的环境变量都已配置。下载ejbca_ca_6_15_2_1.zip,写文章的时候已经到6.15.2.5了。解压并放到服务器的/opt下面

 

到${ejbca_home}/conf/目录下,配置如下属性文件,初始化状态都是带sample后缀的,复制出来修改成properties即可。

配置属性文件在ejbca/conf/目录下,不指出来的可以留着默认
        ejbca.properties(ejbca运行的服务器):
            appserver.home  #中间件目录(wildfly的根目录)
            appserver.type  #中间件类型(jboss)
        install.properties(构建时使用此CA来签发服务器SSL证书和登陆证书):
            ca.name #管理CA的名称
            ca.dn   #管理CA证书的一些DN项
        database.properties(配置证书存储的数据库):
            datasource.jndi-name    #数据源名称
            database.name           #数据库名称
            database.url            #数据库连接地址
            database.driver         #数据库驱动类名
            database.username       #数据库账号
            database.password       #数据库密码
        web.properties(登陆证书以及服务器证书的配置):
            java.trustpassword      #wildfly信任列表的jks密码
            superadmin.cn           #登陆证书的commonName
            superadmin.dn           #登陆证书的DN项
            superadmin.password     #登陆证书的密码
            httpsserver.password    #服务器证书密码
            httpsserver.hostname    #服务器主机名(域名)
            httpsserver.dn          #服务器主机DN

 

 具体步骤

1.编辑wildfly的/bin/standalone.conf 文件添加初始化和最大堆参数:JAVA_OPTS="-Xms2048m -Xmx2048m -Djava.net.preferIPv4Stack=true"

然后添加数据源,如果觉得文档上的难理解,可以直接启动wildfly,然后访问后台页面直接添加即可。熟悉wildfly的也可以直接在standalone.xml里面添加数据源。
对应的数据库驱动需要放到wildfly的standalone/deployments目录下,后台管理才可以扫描到。数据源的账号密码对应database.properties里面的即可。
Wildfly启动的后台默认限制只能本地访问的,如果wildfly在虚拟机上面,需要修改standalone/configuration/standalone.xml对应的端口开放。

wildfly后台添加数据源的图:

 

 

 

2.设置访问限制

连接jboss本地服务设置远程访问,连接jboss

 

 

 

执行如下:

/subsystem=remoting/http-connector=http-remoting-connector:remove
/subsystem=remoting/http-connector=http-remoting-connector:add(connector-ref="remoting",security-realm="ApplicationRealm")
/socket-binding-group=standard-sockets/socket-binding=remoting:add(port="4447")
/subsystem=undertow/server=default-server/http-listener=remoting:add(socket-binding=remoting)
:reload
View Code
#配置日志
/subsystem=logging/logger=org.ejbca:add
/subsystem=logging/logger=org.ejbca:write-attribute(name=level, value=DEBUG)
/subsystem=logging/logger=org.cesecore:add
/subsystem=logging/logger=org.cesecore:write-attribute(name=level, value=DEBUG)
View Code

3.构建运行

#清理和构建并拷贝在指定的中间件
ant clean deployear
#此命令执行的是先删除对应生成的一些文件和文件夹,然后构建整个项目(具体可查看build.xml)


#创建证书(如果已经存在旧的证书,则不需要再次创建)
ant runinstall
#创建keystore,产生p12登陆证书和服务器的SSL证书,此项设置需要属性ejbca目录下的conf目录下的web.properties的属性

#拷贝产生的证书文件到指定的${wildfly_home}/standalone/configuration/keystore/目录下面。
ant deploy-keystore
View Code

 

 

再回到jboss的本地服务,添加interface和其他

 

#添加3个interface,并设置随处访问
/interface=http:add(inet-address="0.0.0.0")
/interface=httpspub:add(inet-address="0.0.0.0")
/interface=httpspriv:add(inet-address="0.0.0.0")
/socket-binding-group=standard-sockets/socket-binding=http:add(port="8080",interface="http")
/subsystem=undertow/server=default-server/http-listener=http:add(socket-binding=http)
/subsystem=undertow/server=default-server/http-listener=http:write-attribute(name=redirect-socket, value="httpspriv")
:reload

#设置服务器的SSL连接,指定服务器证书和信任列表证书,对应web.properties上面的属性
/core-service=management/security-realm=SSLRealm:add()
/core-service=management/security-realm=SSLRealm/server-identity=ssl:add(keystore-path="${jboss.server.config.dir}/keystore/keystore.jks", keystore-password="serverpwd", alias="localhost")
/core-service=management/security-realm=SSLRealm/authentication=truststore:add(keystore-path="${jboss.server.config.dir}/keystore/truststore.jks", keystore-password="changeit")
/socket-binding-group=standard-sockets/socket-binding=httpspriv:add(port="8443",interface="httpspriv")
/socket-binding-group=standard-sockets/socket-binding=httpspub:add(port="8442", interface="httpspub")


#设置指定的连接需要客户端证书
/subsystem=undertow/server=default-server/https-listener=httpspriv:add(socket-binding=httpspriv, security-realm="SSLRealm", verify-client=REQUIRED)
/subsystem=undertow/server=default-server/https-listener=httpspriv:write-attribute(name=max-parameters, value="2048")
/subsystem=undertow/server=default-server/https-listener=httpspub:add(socket-binding=httpspub, security-realm="SSLRealm")
/subsystem=undertow/server=default-server/https-listener=httpspub:write-attribute(name=max-parameters, value="2048")
:reload

#设置webservice的属性
/system-property=org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH:add(value=true)
/system-property=org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH:add(value=true)
/system-property=org.apache.catalina.connector.URI_ENCODING:add(value="UTF-8")
/system-property=org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING:add(value=true)
/subsystem=webservices:write-attribute(name=wsdl-host, value=jbossws.undefined.host)
/subsystem=webservices:write-attribute(name=modify-wsdl-address, value=true)
:reload
View Code

 

到此,一个简单的EJBCA实例已经可以使用。如需要使用密码机之类的还需要对应的属性配置以及厂商的库。

把上面生成p12证书拿到本地安装,然后访问你的${httpsserver.hostname}:8443/ejbca/adminweb/,选择你的证书即可。上面的脚本绑定https访问是8443端口且需要客户端证书。

完成后的效果图:

 

 

如果需要免费的SSL证书可以在这里获取[免费SSL证书]

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM