前一段时间折腾了一下PKI,用EJBCA在研究院内网搭建了一个CA,目前是提供给手机端(安卓和IOS)来和服务器端(nginx + Java应用)作安全链接的(客户端和服务器端双向认证)html
因为EJBCA官方的安装文档太不靠谱了,按照官方的文档来作的话会遇到各类坑, 因此记录一下我安装的过程.但愿能给用到的人有一点帮助.java
这里也贴一下官方的文档地址:https://www.ejbca.org/docs/installation.htmlnginx
环境和所依赖的软件包: Ubuntu 16.04 LTS, ORACLE JDK7, ANT,ejbca_ce_6.3.11,wildfly8,PostgreSQL9.4web
安装过程大概分为几个步骤(jdk和Ant,postgresql数据库的安装略过)sql
1.安装和启动wildfly服务器数据库
2.在postgresql中新建一个数据库apache
3.配置wildfly的数据源浏览器
4.在wildfly的命令行接口中执行一些初始化命令(清理SSL,设置日志级别等)tomcat
5.修改ejbca的默认设置安全
6.使用ant命令编译和部署ejbca,并copy服务器端证书到正确的位置
7.在wildfly的命令行接口中配置https等
如下是具体的命令,假定ejbca解压以后的位置是在 /opt/pki/ejbca_ce_6_3_1_1,wildfly解压以后的位置是: /opt/pki/wildfly-8.0.0.Final
安装和启动wildfly服务器
解压wildfly的安装包以后进步 bin目录,以standalone方式启动wildfly: nohup ./standalone.sh > jboss.log 2>&1 &
新建数据库名为ejbca的数据库
配置wildfly的数据源
首先将postgresql的驱动包放入wildfly的deploy目录进行部署
而后进入jboss的命令行接口(在wildfly的bin目录下执行 ./jboss-cli.sh -c 命令进入,咱们以后的一些操做也是在这一命令行接口中执行的)
执行增长数据源的操做:
data-source add --name=ejbcads --driver-name="postgresql-9.3.jar" --connection-url="jdbc:postgresql://192.168.171.129:5432/ejbca" --jndi-name="java:/EjbcaDS" --use-ccm=true --driver-class="org.postgresql.Driver" --user-name="postgres" --password="${your password}" --validate-on-match=true --background-validation=false --prepared-statements-cache-size=50 --share-prepared-statements=true --min-pool-size=5 --max-pool-size=150 --pool-prefill=true --transaction-isolation=TRANSACTION_READ_COMMITTED --check-valid-connection-sql="select 1;"
在wildfly的命令行接口中执行一些初始化命令(清理SSL,设置日志级别等)
/socket-binding-group=standard-sockets/socket-binding=remoting:remove /subsystem=undertow/server=default-server/http-listener=remoting:remove /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 /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) /core-service=management/security-realm=SSLRealm/authentication=truststore:remove /core-service=management/security-realm=SSLRealm/server-identity=ssl:remove /core-service=management/security-realm=SSLRealm:remove /socket-binding-group=standard-sockets/socket-binding=httpspub:remove /subsystem=undertow/server=default-server/https-listener=httpspub:remove /socket-binding-group=standard-sockets/socket-binding=httpspriv:remove /subsystem=undertow/server=default-server/https-listener=httpspriv:remove /socket-binding-group=standard-sockets/socket-binding=http:remove /subsystem=undertow/server=default-server/http-listener=http:remove /subsystem=undertow/server=default-server/http-listener=default:remove /system-property=org.apache.catalina.connector.URI_ENCODING:remove /system-property=org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING:remove /interfaces=/interface=http:remove /interfaces=/interface=httpspub:remove /interfaces=/interface=httpspriv:remove :reload
修改ejbca的默认配置
解压ejbca安装包,并进入解压以后的文件夹(/opt/pki/ejbca_ce_6_3_1_1)
conf目录中是ejbca的配置文件,在build和生成CA的时候会读取这个文件中的一些设置,里边的配置文件都是以.sample结尾的,若是咱们要修改默认的配置就要把须要修改的文件重命名,吧.sample去掉
咱们须要修改一下几个文件:
ejbca.properties(mv ejbca.properties.sample ejbca.properties)
设置 appserver.home 的值(就是应用服务器的安装位置,对于咱们来讲是 /opt/pki/wildfly-8.0.0.Final)
web.properties(mv web.properties.sample web.properties)
这个文件里设置CA的超级管理员的证书密码,以及给应用服务器生成的服务器端证书的证书密码,和CA的truststory的密码等,这些密码的设置咱们能够根据须要设置,或者保持默认的配置,须要注意的是httpsserver.hostname,这个要和后边的alias相对应,个人ip地址为192.168.171.129,咱们设置为192.168.171.129
database.properties(mv database.properties.sample database.properties)
设置数据库的类型,驱动程序,url,用户名和密码等
install.properties(mv install.properties.sample install.properties)
设置CA的名称,加密方式等
使用ant命令编译和部署ejbca,并copy服务器端证书到正确的位置
到ejbca目录下(对于咱们来讲是 /opt/pki/ejbca_ce_6_3_1_1)依次执行如下命令:
ant clean deployear
ant runinstall
ant deploy-keystore
在ejbca目录下会生成superAdmin.p12,truststroe.jks,和tomcat.jks
superAdmin.p12是超级管理员的证书,咱们访问ejbca的web管理页面和调用ejbca提供的RA接口的时候回用到这个证书
truststore.jks提供给客户端来认证服务器端时用的(服务器端认证客户端证书比较经常使用,作双向认证的时候会用到客户端对服务器端的认证)
tomcat.jks是部署在wildfly上的服务器端证书,用于服务器端启用SSL
在wildfly的命令行接口中配置https等
/interfaces=/interface=http:add(inet-address="0.0.0.0") /interfaces=/interface=httpspub:add(inet-address="0.0.0.0") /interfaces=/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,可是不要在此时执行reload/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="192.168.171.129") /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") /subsystem=undertow/server=default-server/https-listener=httpspriv:add(socket-binding=httpspriv, security-realm="SSLRealm", verify-client=REQUIRED) /socket-binding-group=standard-sockets/socket-binding=httpspub:add(port="8442", interface="httpspub") /subsystem=undertow/server=default-server/https-listener=httpspub:add(socket-binding=httpspub, security-realm="SSLRealm") -- 官文文档上说此时须要relaod,可是不要reload /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) --- 防止JSF报错 /subsystem=weld:write-attribute(name=require-bean-descriptor,value=true)
--启用AJP:
/subsystem=undertow/server=default-server/ajp-listener=ajp-listener:add(socket-binding=ajp, scheme=https, enabled=true)
:reload
此时将超级管理员的证书导入浏览器,访问ejbca提供的web管理员页面(对于咱们来讲,这个地址是https://192.168.171.129:8443/ejbca/adminweb)
若是能够顺利访问的话咱们的安装就成功了.