前一段时间折腾了一下PKI,用EJBCA在研究院内网搭建了一个CA,目前是提供给手机端(安卓和IOS)来和服务器端(nginx + Java应用)做安全连接的(客户端和服务器端双向认证)

由于EJBCA官方的安装文档太不靠谱了,按照官方的文档来做的话会遇到各种坑, 所以记录一下我安装的过程.希望能给用到的人有一点帮助.

这里也贴一下官方的文档地址:https://www.ejbca.org/docs/installation.html

环境和所依赖的软件包: Ubuntu 16.04 LTS, ORACLE JDK7, ANT,ejbca_ce_6.3.11,wildfly8,PostgreSQL9.4

安装过程大概分为几个步骤(jdk和Ant,postgresql数据库的安装略过)

1.安装和启动wildfly服务器

2.在postgresql中新建一个数据库

3.配置wildfly的数据源

4.在wildfly的命令行接口中执行一些初始化命令(清理SSL,设置日志级别等)

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= --share-prepared-statements=true --min-pool-size= --max-pool-size= --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="",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="",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="", 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)

如果可以顺利访问的话我们的安装就成功了.

EJBCA的安装(基于Ubuntu 16.04 LTS + wildfly8 + ejbca6.3.11 + jdk7)的更多相关文章

  1. Ubuntu 16.04 LTS安装好需要设置的15件事(喜欢新版本)

    看到这篇文章说明你已经从老版本升级到 Ubuntu 16.04 或进行了全新安装,在安装好 Ubuntu 16.04 LTS 之后建议大家先做如下 15 件事.无论你是刚加入 Ubuntu 行列的新用 ...

  2. Ubuntu 16.04 LTS安装好之后需要做的15件事

    看到这篇文章说明你已经从老版本升级到 Ubuntu 16.04 或进行了全新安装,在安装好 Ubuntu 16.04 LTS 之后建议大家先做如下 15 件事.无论你是刚加入 Ubuntu 行列的新用 ...

  3. Ubuntu 16.04 LTS 安装 Nginx/PHP 5.6/MySQL 5.7 (LNMP) 与Laravel

    Ubuntu 16.04 LTS 安装 Nginx/PHP 5.6/MySQL 5.7 (LNMP) 与Laravel 1.MySQL安装[安装 MariaDB]MariaDB是MySQL的一个分支首 ...

  4. Ubuntu 16.04 LTS U盘安装要点

    一.UltraISO UltraISO是一款功能强大而又方便实用的光盘映像文件制作/编辑/转换工具,它可以直接编辑ISO文件和从ISO中提取文件和目录,也可以从CD-ROM制作光盘映像或者将硬盘上的文 ...

  5. Ubuntu 16.04 LTS安装 TeamViewer

    Ubuntu 16.04 LTS安装 TeamViewer     64位Ubuntu 16.04系统需要添加32位架构支持,命令如下. sudo dpkg --add-architecture i3 ...

  6. Ubuntu 16.04 LTS 安装 miniconda

    Ubuntu 16.04 LTS 安装 miniconda 下载 miniocnda 的 bash 文件下载链接 https://conda.io/miniconda.html ,我选择的是 64-b ...

  7. Ubuntu 16.04 LTS 降级安装GCC 4.8

    转载自https://www.linuxidc.com/Linux/2017-03/142299.htm Ubuntu 16.04 LTS 降级安装GCC 4.8 [日期:2017-03-28] 来源 ...

  8. Ubuntu 16.04 LTS 安装libvips出现”Package vips was not found in the pkg-config search path”

    使用libvips来操作图像,libvips的部署参考一个Node.js工程:https://github.com/lovell/sharp 在MAC下安装很顺利,到Linux环境下(Ubuntu 1 ...

  9. Ubuntu 16.04 LTS安装Docker并使用加速器

    参考优酷:http://v.youku.com/v_show/id_XMTkxOTYwODcxNg==.html?spm=a2h0k.8191407.0.0&from=s1.8-1-1.2 首 ...

随机推荐

  1. Mac eclipse 连接安卓手机调试 adb

    echo 手机厂商号 >>  ~/.android/adb_usb.ini  ~ echo 0x18d1 >>  ~/.android/adb_usb.ini 重启系统即可 环 ...

  2. MD5 哈希等各种加密方式 都是对这个对象进行各种运算, 然后得出1个字符串

    你列出的4个  都是对对象的 加密算法

  3. [转]iOS证书(.p12)和描述文件(.mobileprovision)申请

    转载于:http://ask.dcloud.net.cn/article/152 iOS有两种证书和描述文件: 证书类型 使用场景 开发(Development)证书和描述文件 用于开发测试,在HBu ...

  4. 移动端网页使用flexible.js加入百度联盟广告样式不一致问题解决

    flexible.js是淘宝推出的一款移动端手机自适应的库,源码内容很简洁,当网页使用了该库之后,页面会在head中加入对应的页面响应式的meta标签. 当使用flexible.js的时候,引入百度联 ...

  5. 理解Node.js异步非阻塞I/O与传统线性阻塞IO的区别(转)

    阻塞I/O 程序执行过程中必然要进行很多I/O操作,读写文件.输入输出.请求响应等等.I/O操作时最费时的,至少相对于代码来说,在传统的编程模式中,举个例子,你要读一个文件,整个线程都暂停下来,等待文 ...

  6. jenkins 忘记admin用户账号密码

    一不小心,忘记了admin用户的账号密码.然后就看不到manage jenkins的那部分内容了,看不到就改不了用户权限,也就是系统瘫痪了. 于是,想着开始没注册账号和密码的时候,都能看见,也就是没有 ...

  7. Linux下的ssh远程访问

    准备工作:首先需要在windows系统中安装虚拟机,并在虚拟机中安装好linux操作系统,这里安装的是vmware player虚拟机和ubuntu版本的操作系统.关于该部分的安装在作者的其他经验中有 ...

  8. Win7下telnet使用

    出于安全考虑,win7已经禁用了telnet这一功能, telnet是明文传输的,安全性很差. 知道了这一点就不奇怪为什么在win7下不能使用telnet了,下面就详细介绍下如何重新开启telnet服 ...

  9. VC++6.0相对路径无效的解决办法

    我们在开发程序时,常常需要操作相关的文件.操作文件一般有两种方法:绝对路径和相对路径.绝对路径是从盘符开始的,相对路径则是相对于当前目录. 绝对路径很简单,一般也不会出错,但是在实际开发过程中要慎用绝 ...

  10. 【代码审计】DouPHP_v1.3代码执行漏洞分析

      0x00 环境准备 DouPHP官网:http://www.douco.com/ 程序源码下载:http://down.douco.com/DouPHP_1.3_Release_20171002. ...