• EJBCA的安装(基于Ubuntu 16.04 LTS + wildfly8 + ejbca6.3.11 + jdk7)


    前一段时间折腾了一下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=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)

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

  • 相关阅读:
    CTF web之旅 20
    CTF web之旅 19
    CTF web之旅 18
    CTF web之旅 17
    CTF web之旅 16
    php数组遍历函数array_reduce、array_filter()、array_map()、array_walk()三者的用法和区别
    composer require安装的模块依赖和`composer.json`中版本冲突
    Linux执行shell出现错误bad interpreter: No such file or directory解决方法
    dcat-admin
    在Laravel外独立使用Eloquent
  • 原文地址:https://www.cnblogs.com/jiaoyiping/p/5814168.html
Copyright © 2020-2023  润新知