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]]