EJBCA
Aus HC Services
Inhaltsverzeichnis | 
Benötigte Pakete
- Java SDK (.bin File) von http://www.oracle.com/technetwork/java/javase/downloads/index.html
 - Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6 von http://www.oracle.com/technetwork/java/javase/downloads/index.html
 
- JBoss 5 von http://www.jboss.org/jbossas/downloads.html
 - Apache Ant von http://ant.apache.org/bindownload.cgi
 - EJBCA von http://sourceforge.net/projects/ejbca/files/ejbca4/
 - MySQL Server
 - JDBC MySQL Connector von http://dev.mysql.com/downloads/connector/j/
 
Installation Prerequisiten
Java
- Binary ausführbar machen
 
chmod 755 jdk-<vesion>.bin
- Ausführen
 
./jdk-<vesion>.bin ...
- Erstelltes Verzeichniss nach /opt verschieben und einen Symlink für späteren Versionsswitch erstellen
 
mv jdk1.<version> /opt/ ln -s /opt/jdk1.<version> /opt/java
- Javaspezifische Variablen setzen
 
export JAVA_HOME="/opt/java" export PATH=$PATH:$JAVA_HOME/bin
- JCE installieren
 
unzip jce_policy-6.zip cp jce/*.jar $JAVA_HOME/jre/lib/security
JBoss
- Entpacken
 
unzip jboss-5.1.0.GA.zip
- Erstelltes Verzeichniss nach /opt verschieben und einen Symlink für späteren Versionsswitch erstellen
 
mv jboss-5.1.0.GA/ /opt/ ln -s /opt/jboss-5.1.0.GA/ /opt/jboss
- JBossspezifische Variablen setzen
 
export APPSRV_HOME="/opt/jboss" export JBOSS_HOME="/opt/jboss/"
JDBC MySQL Treiber
- Entpacken und ins JBoss-Lib Verzeichnis kopieren
 
tar -zxf mysql-connector-java-<version>.tar.gz cp mysql-connector-java-<version>/mysql-connector-java-<version>-bin.jar /opt/jboss/common/lib/
Ant
- Gleiche Prozedur wie bei Java und JBoss
 
tar -zxf apache-ant-<version>-bin.tar.gz mv apache-ant-<version> /opt/ ln -s /opt/apache-ant-<version>/ /opt/ant export ANT_HOME="/opt/ant" export PATH=$PATH:$ANT_HOME/bin export ANT_OPTS="-Xmx512m" #Optional
Installation ECBCA
Preconfiguration EJBCA
- Gleiche Prozedur wie bei Java und JBoss, und Ant
 
unzip ejbca_<version>.zip mv ejbca_<version> /opt/ ln -s /opt/ejbca_<version>/ /opt/ejbca export EJBCA_HOME="/opt/ejbca"
Datenbank anlegen
mysql -u root -p mysql> create database testca; mysql> grant all privileges on testca.* to testca identified by 'blabla'; mysql> quit
Konfigfiles anpassen
- $EJBCA_HOME/conf/cmp.properties
 
cmp.ra.caname=TestCA
- $EJBCA_HOME/conf/database.properties
 
database.name=mysql datasource.mapping=mySQL database.url=jdbc:mysql://127.0.0.1:3306/testca?characterEncoding=UTF-8 database.driver=com.mysql.jdbc.Driver database.username=testca database.password=blabla
- $EJBCA_HOME/conf/ejbca.properties
 
appserver.type=jboss appserver.home=/opt/jboss ca.keystorepass=U|tr@s€cret ca.xkmskeystorepass=U|tr@s€cret ca.cmskeystorepass=U|tr@s€cret
- $EJBCA_HOME/conf/install.properties
 
ca.name=TestCA ca.dn=CN=TestCA,OU=PKI,O=HC Services,C=DE ca.keyspec=2048 ca.keytype=RSA ca.signaturealgorithm=SHA1WithRSA ca.validity=7300 ca.policy=1.2.3.3.4 ca.tokenpassword=null # sonst wird gefragt
- $EJBCA_HOME/conf/mail.properties
 
mail.user=user mail.password=lala mail.smtp.host=mailhost mail.smtp.auth=true mail.from=ca-donotreply@hc-services.de web.contentencoding=UTF-8
- $EJBCA_HOME/conf/ocsp.properties
 
ocsp.defaultresponder=CN=Test OCSP,OU=PKI,O=HC Services,C=DE
- $EJBCA_HOME/conf/web.properties
 
java.trustpassword=U|tr@s€cret2
superadmin.cn=Testca SuperAdmin
superadmin.dn=CN=${superadmin.cn},OU=PKI,O=HC Services,C=DE
superadmin.password=lala123
superadmin.batch=true
httpsserver.password=lala345
httpsserver.hostname=testca.hc-services.de
httpsserver.dn=CN=${httpsserver.hostname},O=HC Services,C=DE
httpserver.pubhttp=80
httpserver.pubhttps=443
- $EJBCA_HOME/conf/xkms.properties
 
xkms.request.acceptedcas=TestCA
EJBCA installieren
- EJBCA kompilieren
 
ant bootstrap
- Starten des JBoss
 - Falls die Exception "JCE cannot authenticate the provider BC" auftritt (http://community.jboss.org/message/6134#6134)
 
cp $EJBCA_HOME/lib/bc*.jar $JBOSS_HOME/server/default/lib/
- Jboss starten
 
$APPSRV_HOME/bin/run.sh &
- EJBCA installieren
 
ant install
- Jboss stoppen
 
$APPSRV_HOME/bin/shutdown.sh -S
- Ejbca deployen und CA anlegen
 
ant deploy
- Variablen persistent setzen in /etc/profile
 
JAVA_HOME="/opt/java" APPSRV_HOME="/opt/jboss" JBOSS_HOME="/opt/jboss/" ANT_HOME="/opt/ant" ANT_OPTS="-Xmx512m" EJBCA_HOME="/opt/ejbca" PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$EJBCA_HOME/bin:$PATH export JAVA_HOME APPSRV_HOME JBOSS_HOME ANT_HOME ANT_OPTS EJBCA_HOME PATH
- Jboss starten
 
$APPSRV_HOME/bin/run.sh &
- Wichtig: als erstes das Root Zertifikat im Browser installieren unter https://hostname/ejbca/retrieve/ca_certs.jsp
 - Pkcs12 Datei $EJBCA_HOME/p12/admincert.p12 im Browser installieren (Passwort ist superadmin.password aus web.properties)
 - Public Interface - https://hostname/ejbca
 - Admininterface - https://hostname:8443/ejbca/adminweb/index.jsp
 
Externe RA GUI (vorerst nur JBoss 5)
Vorbereitungen
- Jboss und Java installieren wie beschrieben
 
Externe DB
- auf externer RA
 
mysql -u root -p mysql> create database ejbca_messages; mysql> grant all privileges on ejbca_messages.* to ejbca_ext@'%' identified by 'blablabla'; mysql> quit
Zertifikate für HTTPS und Secure Messaging
- für HTTPS einen JKS ausstellen, der das Webserverzertifikat und Key der Externen RA beinhaltet
 - für Secure Messaging ein PKCS12 (external-ra.p12) ausstellen, Typ Enduser
 - external-ra.p12 nach $EJBCA_HOME/P12 kopieren
 
Interne EJBCA konfigurieren
- $EJBCA_HOME/conf/externalra.properties
 
externalra.enabled=true externalra.source-1.jdbc-url=jdbc:mysql://externer-ca-host/ejbca_messages externalra.source-1.username=ejbca_ext externalra.source-1.password=blablabla
- EJBCA re-deployen
 
cd $EJBCA_HOME && ant deploy
- jboss restarten
 
RA Service Worker anlegen
- per Browser auf Adminbereich gehen
 - unter "Edit Services" einen neuen Service (External-RA) hinzufügen
 - '"Edit Service" klicken
 
-  Select Worker
- Custom Worker
 
 
-  Custom Worker Class Path
- org.ejbca.extra.caservice.ExtRACAServiceWorker
 
 
- Custom Worker Properties
 
externalra-caservice.keystore.path=/opt/ejbca/p12/external-ra.p12 externalra-caservice.keystore.pwd=blablablabla externalra-caservice.whitelist=org.ejbca.extra.db.CertificateRequestRequest,org.ejbca.extra.db.KeyStoreRetrievalRequest externalra-caservice.signature.required=true externalra-caservice.encryption.required=false externalra-caservice.raissuer=TestCA externalra-caservice.persistenceunit=RAMessage1DS
-  Select Interval
- Periodical Intervall
 
 
-  Period
- 10 Seconds
 
 
-  Select Action
- No Action
 
 
-  Active
- anklicken
 
 
-  Description
- External RA Worker
 
 
- Speichern
 
Externe EJBCA (RA) konfigurieren
- Zertifikat des external-ra.p12 als PEM herunterladen und in $EJBCA_HOME/cert/external-ra.pem speichern
 - JKS mit dem HTTPS Zertifikat der Externen RA herunterladen und auch in $EJBCA_HOME/cert/servercert-ra.jks speichern
 - superadmin.p12 oder ein anderes Administratorzertifikat nach $EJBCA_HOME/cert/superadmin.p12 kopieren
 - CA Zertifikat als PEM PEM herunterladen und in $EJBCA_HOME/cert/cacert.pem speichern
 
- $EJBCA_HOME/conf/externalra-gui.properties
 
webserver.http.bindport=80 webserver.https.bindport=443 webserver.keystore.file=/opt/ejbca/cert/servercert-ra.jks webserver.keystore.password=websecret externalra-gui.datasource.jdbc-url=jdbc:mysql://127.0.0.1/ejbca_messages externalra-gui.datasource.username=ejbca_ext externalra-gui.datasource.password=blablabla externalra-gui.caservicecert=/opt/ejbca/cert/external-ra.pem externalra-gui.keystore=/opt/ejbca/cert/superadmin.p12 externalra-gui.keystorepassword=lala123 externalra-gui.issuerchain=/opt/ejbca/cert/cacert.pem
- Externe RA GUI deployen
 
ant externalra-gui-deploy
- Jboss Starten
 
/etc/init.d/jboss start
- Per Browser auf http://externer-ra-name/externalra-gui verbinden
 
Troubleshooting
Probleme mit der Kommunikation
Wenn die interne CA vor der externen gestartet wird, gibt es Probleme mit dem Worker, weil er sich nicht zur DB verbinden kann. Selbst wenn diese dann später hochgefahren ist.
Probleme mit JBoss 6
1. Die Externe RA startet nicht weil der Hibernate Search fehlschlägt mit
Deployment "persistence.unit:unitName=externalra-gui.war#ExternalRAGUIMessageDS" is in error due to the following reason(s): java.lang.NoSuchMethodError: org.hibernate.util.SoftLimitMRUCache.<init>(I)V
2. Bei der internen CA gibt es probleme mit dem Timer
ERROR [TimerTask] Error invoking timeout for timer: [id=5e3d4892-4d99-42e6-aeec-448e65ba55cf timedObjectId=jboss.j2ee:ear=ejbca.ear,jar=ejbca-ejb.jar, name=ServiceSessionBean,service=EJB3 auto-timer?:false persistent?:true timerService=org.jboss.ejb3.timerservice.mk2.TimerServiceImpl@3938f65e initialExpiration=2011-07-28 20:07:57.255 intervalDuration(in milli sec)=0 nextExpiration=null timerState=IN_TIMEOUT: org.jboss.injection.manager.spi.InjectionException: javax.naming.NamingException: Could not dereference object [Root exception is javax.naming.NamingException: Could not dereference object [Root exception is javax.naming.NameNotFoundException: AuthorizationSessionBean not bound]]