前言
EJBCA是可以實現簽發自簽證書並且提供證書驗證(CRL,OCSP)的開源項目,主要實現了CAB論壇的BR基准和ADOBE的基准以及一些RFC協議。
一般來說只有CA機構才會使用到,這里記錄下EJBCA的安裝。官方提供了docker的形式安裝(以后測試安裝)。
參考文獻
EJBCA官網:https://www.ejbca.org/
EJBCA官方文檔:https://doc.primekey.com/ejbca6152/ejbca-installations/ejbca-main-installation/application-servers/wildfly-10-jboss-eap-7-0
CAB論壇:https://cabforum.org/
EJBCA幫助論壇:https://sourceforge.net/p/ejbca/discussion/123123/
環境和版本信息
EJBCA:社區版6.15.2.1
中間件:wildfly-10.0.0.Final
系統:Centos7.2 內存:4G(虛擬機)
Ant:1.10.7
JDK:1.8
前置屬性
默認java,ant的環境變量都已配置。下載ejbca_ca_6_15_2_1.zip,寫文章的時候已經到6.15.2.5了。解壓並放到服務器的/opt下面
到${ejbca_home}/conf/目錄下,配置如下屬性文件,初始化狀態都是帶sample后綴的,復制出來修改成properties即可。
配置屬性文件在ejbca/conf/目錄下,不指出來的可以留着默認 ejbca.properties(ejbca運行的服務器): appserver.home #中間件目錄(wildfly的根目錄) appserver.type #中間件類型(jboss) install.properties(構建時使用此CA來簽發服務器SSL證書和登陸證書): ca.name #管理CA的名稱 ca.dn #管理CA證書的一些DN項 database.properties(配置證書存儲的數據庫): datasource.jndi-name #數據源名稱 database.name #數據庫名稱 database.url #數據庫連接地址 database.driver #數據庫驅動類名 database.username #數據庫賬號 database.password #數據庫密碼 web.properties(登陸證書以及服務器證書的配置): java.trustpassword #wildfly信任列表的jks密碼 superadmin.cn #登陸證書的commonName superadmin.dn #登陸證書的DN項 superadmin.password #登陸證書的密碼 httpsserver.password #服務器證書密碼 httpsserver.hostname #服務器主機名(域名) httpsserver.dn #服務器主機DN
具體步驟
1.編輯wildfly的/bin/standalone.conf 文件添加初始化和最大堆參數:JAVA_OPTS="-Xms2048m -Xmx2048m -Djava.net.preferIPv4Stack=true"
然后添加數據源,如果覺得文檔上的難理解,可以直接啟動wildfly,然后訪問后台頁面直接添加即可。熟悉wildfly的也可以直接在standalone.xml里面添加數據源。
對應的數據庫驅動需要放到wildfly的standalone/deployments目錄下,后台管理才可以掃描到。數據源的賬號密碼對應database.properties里面的即可。
Wildfly啟動的后台默認限制只能本地訪問的,如果wildfly在虛擬機上面,需要修改standalone/configuration/standalone.xml對應的端口開放。
wildfly后台添加數據源的圖:
2.設置訪問限制
連接jboss本地服務設置遠程訪問,連接jboss:
執行如下:

/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)
3.構建運行

#清理和構建並拷貝在指定的中間件 ant clean deployear #此命令執行的是先刪除對應生成的一些文件和文件夾,然后構建整個項目(具體可查看build.xml) #創建證書(如果已經存在舊的證書,則不需要再次創建) ant runinstall #創建keystore,產生p12登陸證書和服務器的SSL證書,此項設置需要屬性ejbca目錄下的conf目錄下的web.properties的屬性 #拷貝產生的證書文件到指定的${wildfly_home}/standalone/configuration/keystore/目錄下面。 ant deploy-keystore
再回到jboss的本地服務,添加interface和其他

#添加3個interface,並設置隨處訪問 /interface=http:add(inet-address="0.0.0.0") /interface=httpspub:add(inet-address="0.0.0.0") /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 #設置服務器的SSL連接,指定服務器證書和信任列表證書,對應web.properties上面的屬性 /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="localhost") /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") /socket-binding-group=standard-sockets/socket-binding=httpspub:add(port="8442", interface="httpspub") #設置指定的連接需要客戶端證書 /subsystem=undertow/server=default-server/https-listener=httpspriv:add(socket-binding=httpspriv, security-realm="SSLRealm", verify-client=REQUIRED) /subsystem=undertow/server=default-server/https-listener=httpspriv:write-attribute(name=max-parameters, value="2048") /subsystem=undertow/server=default-server/https-listener=httpspub:add(socket-binding=httpspub, security-realm="SSLRealm") /subsystem=undertow/server=default-server/https-listener=httpspub:write-attribute(name=max-parameters, value="2048") :reload #設置webservice的屬性 /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) :reload
到此,一個簡單的EJBCA實例已經可以使用。如需要使用密碼機之類的還需要對應的屬性配置以及廠商的庫。
把上面生成p12證書拿到本地安裝,然后訪問你的${httpsserver.hostname}:8443/ejbca/adminweb/,選擇你的證書即可。上面的腳本綁定https訪問是8443端口且需要客戶端證書。
完成后的效果圖:
如果需要免費的SSL證書可以在這里獲取[免費SSL證書]