前一段時間折騰了一下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)
若是能夠順利訪問的話咱們的安裝就成功了.