前一段时间折腾了一下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. ASP.NET CheckBoxList 控件实现全选、反选、清除功能 利用js

    直接看代码: JS代码如下: <script type="text/javascript" language="javascript"> funct ...

  2. [AngularJS]ng-repeat指令要点

    ng-repeat指令要点 1,基本格式,这里不作过多说明,需要的话查看文档 <div ng-repeat="item in someCollection [| someFilter: ...

  3. lua 时间戳和时间互相转换

    1.时间戳转换成时间 local t = 1412753621000 function getTimeStamp(t)     return os.date("%Y%m%d%H", ...

  4. 图像添加到ABBYY 文档有什么方法

    ABBYY FineReader 12作为一款功能全面的OCR图文识别软件,我们自是可以在其中将图像添加到FineReader文档中去,且添加在文档尾部,否则将会创建一个新的FineReader文档. ...

  5. geoserver REST使用

    1.部署一个简单的测试环境 测试geoserver REST接口,我们可使用python来测试,很方便.需要下载包: python,http://python.org/.我下载的是Python27版本 ...

  6. js九九乘法表的应用

    <html> <head> <meta charset=utf-8" /> <title>js九九乘法表</title> < ...

  7. C#WinForm窗体事件执行次序

    当 Windows Form 应用程序启动时,会以下列顺序引发主要表单的启动事件:         System.Windows.Forms.Control.HandleCreated         ...

  8. 5 -- Hibernate的基本用法 --2 2 Hibernate的数据库操作

    在所有的ORM框架中有一个非常重要的媒介 : PO(持久化对象:Persistent Object).持久化对象的作用是完成持久化操作,简单地说,通过该对象可对数据执行增.删.改的操作 ------ ...

  9. 关于MySQL数据库

    MySQL最流行的关系型数据库管理系统 MySQL官网:http://www.mysql.com MySQL是WEB应用方面最好的RDBMS应用软件之一 RDBMS:Relational Databa ...

  10. 使用powerdesigner连接MySQL并设置逆向工程图文教程

    我用的是Win7 x64的系统,安装了64为的mysql-connector-odbc-5.1.10-winx64.msi在数据源中test正常,但在powerdesigner连接Mysql总是弹出“ ...