NPKD Installation with Wildfly 10
This NPKD Installation guide covers how to install NPKD with Wildfly 10.
Set up Wildfly
Edit /opt/primekey/wildfly/bin/standalone.conf to increase the memory and force using 2048-bit DH keys
Increase the memory by setting JAVA_OPTS variable to
JAVA_OPTS="-Xms2048m -Xmx2048m -Djava.net.preferIPv4Stack=true"
CODEForce use of 2048-bit DH keys in order to mitigate https://weakdh.org/ by adding the following line:
JAVA_OPTS="$JAVA_OPTS -Djdk.tls.ephemeralDHKeySize=2048"
CODE
If an HSM is to be used, add the following patches to Wildfly in the file /opt/primekey/wildfly/modules/system/layers/base/sun/jdk/main/module.xml after all paths.
<path name="sun/security/pkcs11"/> <path name="sun/security/pkcs11/wrapper"/>
CODEAdd the MariaDB Java Client mariadb-java-client-1.5.2.jar into Wildfly directory
Run as primekey
cp mariadb-java-client-1.5.2.jar /opt/primekey/wildfly/standalone/deployments/
BASHCopy the keystore file as /opt/primekey/wildfly/standalone/configuration/keystore/keystore.jks and the trust store as /opt/primekey/wildfly/standalone/configuration/keystore/truststore.jks.
mkdir /opt/primekey/wildfly/standalone/configuration/keystore cp truststore.jks keystore.jks /opt/primekey/wildfly/standalone/configuration/keystore/
CODE
Configure Wildfly
Start Wildfly
sudo systemctl restart wildfly
BASHStart JBoss CLI on a different terminal to configure data source:
/opt/primekey/wildfly/bin/jboss-cli.sh --connect
BASHAdd a datasource as follows and make sure to use the right database name, username and password, and the correct date-source name as configured in /opt/primekey/npkd/conf/npkd_deploy.properties:
Run in JBoss CLI
data-source add --name=npkdds --driver-name="mariadb-java-client.jar" --connection-url="jdbc:mysql://127.0.0.1:3306/npkddb" --jndi-name="java:/NpkdDS" --use-ccm=true --driver-class="org.mariadb.jdbc.Driver" --user-name="npkd" --password="npkd" --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;" :reload
XMLIf the data source was configured successfully, the output will be similar to:
"outcome" => "success"
CODEConfigure Wildfly remoting
/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
CODEConfigure logging
/subsystem=logging/logger=se.primekey.npkd:add /subsystem=logging/logger=se.primekey.npkd:write-attribute(name=level, value=INFO) /subsystem=logging/logger=org.cesecore:add /subsystem=logging/logger=org.cesecore:write-attribute(name=level, value=INFO)
CODERemove existing TLS and HTTP configuration
/subsystem=undertow/server=default-server/http-listener=default:remove /subsystem=undertow/server=default-server/https-listener=https:remove /socket-binding-group=standard-sockets/socket-binding=http:remove /socket-binding-group=standard-sockets/socket-binding=https:remove :reload
CODEConfigure TLS
/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
CODEConfigure identities and socket bindings:
/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")
CODEExit the JBoss CLI:
exit
CODERestart Wildfly
sudo systemctl restart wildfly
CODEConnect to the JBoss CLI again to continue configuration
/opt/primekey/wildfly/bin/jboss-cli.sh --connect
CODEContinue configuring TLS
/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
CODEOptionally increase the maximum Wildfly upload size (default is 10MB)
/subsystem=undertow/server=default-server/https-listener=httpspriv/:write-attribute(name=max-post-size,value=209715200)
CODEFinalize Wildfly configuration with some important items:
/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
CODESince some transactions (like full listing download or rerunning revocation checks) can take a lot of time, default-timeout should be increased from default value 300 seconds. Recommended is half an hour.
/subsystem=transactions:write-attribute(name="default-timeout", value="1800")
CODEExit the CLI
exit
CODERestart Wildfly
sudo systemctl restart wildfly
CODE
Deploy NPKD
Edit /opt/primekey/npkd/conf/npkd_deploy.properties and set the following properties (please adjust the database properties if not using MariaDB):
datasource.jndi-name=NpkdDS datasource.jndi-name-prefix=java:/ database.name=mysql database.driver=org.mariadb.jdbc.Driver
CODEDeploy NPKD:
cd /opt/primekey/npkd ant deploy-ear
BASHMake sure that Wildfly deployed without errors
Restart Jboss:
sudo systemctl restart wildfly
BASHVerify that NPKD has deployed correctly:
tail -n20 /opt/primekey/wildfly/standalone/log/server.log | grep "npkd.ear"
BASH- Install your SuperAdmin certificate in the web browser.
Connect to NPKD in the web browser using the URL: https://localhost:8443/npkd
- The first time you login to the system, the following message is shown: "Access Control Module is NOT initialized. Error accessing NPKD <SUBJECT DN> is not authorized to access the NPKD GUI". Click Register.
- Confirm by clicking Yes in the pop-up window.
- Re-load/refresh the browser.