WildFly 18 / JBoss EAP 7.3

Configure el servidor de aplicaciones según las instrucciones de las siguientes secciones.

Descargar y extraer WildFly

Si aún no ha descargado WildFly, puede utilizar el siguiente comando para hacerlo:

wget https: //download .jboss.org /wildfly/18 .0.0.Final /wildfly-18 .0.0.Final.zip -O /tmp/wildfly-18 .0.0.Final.zip
unzip -q /tmp/wildfly-18 .0.0.Final.zip -d /opt/
ln -snf /opt/wildfly-18 .0.0.Final /opt/wildfly

Si está utilizando JBoss EAP 7.3, puede descargarlo del sitio web de Red Hat .

Eliminar RESTEasy-Crypto

El servidor de aplicaciones a veces puede cargar su propia versión de Bouncy Castle, lo que genera problemas de incompatibilidad y/o conflictos.

Un error típico que ocurre como consecuencia de la carga de un castillo inflable incorrecto en EJBCA es:

Configuración de ClassCastException BagAttributes, no se puede establecer un nombre descriptivo: java.lang.ClassCastException: org.bouncycastle.jcajce.provider.asymmetric.x509.X509CertificateObject no se puede convertir a org.bouncycastle.jce.interfaces.PKCS12BagAttributeCarrier

Para evitar problemas y evitar que Wildfly/JBoss cargue la biblioteca Bouncy Castle incluida en el módulo RESTEasy-Crypto en lugar de la biblioteca incluida en EJBCA, ejecute lo siguiente:

sed -i 's|.*org.jboss.resteasy.resteasy-crypto.*||' /opt/wildfly/modules/system/layers/base/org/jboss/as/jaxrs/main/module.xml
rm -rf /opt/wildfly/modules/system/layers/base/org/jboss/resteasy/resteasy-crypto

A continuación se muestra un ejemplo de mensaje de registro en caso de conflicto:

ERROR [StartupSingletonBean] BouncyCastle no está cargado por un cargador de clases EJBCA, es probable que haya un conflicto de versiones

Es necesario eliminar reasteasy-crypto cada vez que se instala un parche en JBoss EAP. Al aplicar parches, se puede volver a agregar junto con el parche en modules/system/layers/base/.overlays/ .


Crear una configuración personalizada

Reemplace /opt/wildfly/bin/standalone.conf con el siguiente archivo de configuración.

/opt/wildfly/bin/standalone.conf
if [ "x$JBOSS_MODULES_SYSTEM_PKGS" = "x" ]; then
JBOSS_MODULES_SYSTEM_PKGS= "org.jboss.byteman"
fi
if [ "x$JAVA_OPTS" = "x" ]; then
JAVA_OPTS= "-Xms<HEAP_SIZE>m -Xmx<HEAP_SIZE>m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m"
JAVA_OPTS= "$JAVA_OPTS -Dhttps.protocols=TLSv1.2,TLSv1.3"
JAVA_OPTS= "$JAVA_OPTS -Djdk.tls.client.protocols=TLSv1.2,TLSv1.3"
JAVA_OPTS= "$JAVA_OPTS -Djava.net.preferIPv4Stack=true"
JAVA_OPTS= "$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS"
JAVA_OPTS= "$JAVA_OPTS -Djava.awt.headless=true"
JAVA_OPTS= "$JAVA_OPTS -Djboss.tx.node.id=<TX_NODE_ID>"
JAVA_OPTS= "$JAVA_OPTS -Djdk.tls.ephemeralDHKeySize=2048"
else
echo "JAVA_OPTS already set in environment; overriding default settings with values: $JAVA_OPTS"
fi

Establecer el uso de memoria permitido

De forma predeterminada, el servidor de aplicaciones puede usar 512 MB de memoria RAM. Esto no es suficiente para ejecutar EJBCA, por lo que se recomienda asignar al menos 2048 MB de RAM. Para aumentar el valor predeterminado, ejecute el siguiente comando:

sed -i -e 's/<HEAP_SIZE>/2048/g' /opt/wildfly/bin/standalone .conf

Establecer el ID del nodo de transacción

Establezca el ID del nodo de transacción en un valor único.

sed -i -e "s/<TX_NODE_ID>/$(od -A n -td -N 1 /dev/urandom | tr -d ' ')/g" /opt/wildfly/bin/standalone .conf

Configurar WildFly como servicio

Los sistemas Linux modernos usan systemd para iniciar y detener servicios. El paquete WildFly ya contiene los archivos necesarios para ejecutarse como servicio, pero deben instalarse manualmente. Una vez iniciado como servicio, WildFly se ejecutará con el usuario wildfly , y también deberá agregarlo.

cp /opt/wildfly/docs/contrib/scripts/systemd/launch .sh /opt/wildfly/bin
cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly / .service /etc/systemd/system
mkdir /etc/wildfly
cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly /etc/wildfly .conf
systemctl daemon-reload
useradd -M wildfly
chown -R wildfly:wildfly /opt/wildfly-18 .0.0.Final/

Iniciar WildFly

Inicie WildFly como un servicio.

systemctl start wildfly

Crear una tienda de credenciales de Elytron

Puede proteger sus contraseñas almacenándolas en un almacén de credenciales. Estas credenciales se cifran con una contraseña maestra que WildFly obtiene al iniciarse.

Crear una contraseña maestra

Cree un script que envíe la contraseña maestra a stdout y asegúrese de que el script solo pueda ser ejecutado por el usuario wildfly .

echo '#!/bin/sh' > /usr/bin/wildfly_pass
echo "echo '$(openssl rand -base64 24)'" >> /usr/bin/wildfly_pass
chown wildfly:wildfly /usr/bin/wildfly_pass
chmod 700 /usr/bin/wildfly_pass

Crear el almacén de credenciales

Cree un almacén de credenciales en /opt/wildfly/standalone/configuration cifrado con la contraseña repetida por el script wildfly_pass .

/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=elytron/credential-store=defaultCS:add(location=credentials, relative-to=jboss.server.config.dir, credential-reference={clear-text="{EXT}/usr/bin/wildfly_pass", type="COMMAND"}, create=true)'

Agregar controlador de base de datos

Para MariaDB y PostgreSQL, el controlador de base de datos se puede agregar implementándolo en caliente en el directorio de implementación. WildFly lo recogerá y lo implementará para que pueda crear una fuente de datos inmediatamente. Puede usar un nombre genérico, sin número de versión, para obtener un nombre de controlador genérico para el comando de la fuente de datos.

Comando de ejemplo para MariaDB:

wget https: /opt/wildfly/standalone/deployments/mariadb-java-client .jar //downloads .mariadb.com /Connectors/java/latest/mariadb-java-client-2 .3.0.jar -O

Comando de ejemplo para PostgreSQL:

wget https: //jdbc.postgresql.org/download/postgresql-42.2.9.jar -O /opt/wildfly/standalone/deployments/postgresql.jar

Si utiliza otro tipo de base de datos, copie el controlador JDBC al directorio de implementación y anote la clase y el nombre del controlador que aparecen en el registro del servidor para usarlos posteriormente al agregar la fuente de datos. Por ejemplo:

... INFO [org.jboss.as.connector.deployers.jdbc] (...) WFLYJCA0005: Deploying non-JDBC-compliant driver class org.postgresql.Driver (version 42.2.5)
... INFO [org.jboss.as.connector.deployers.jdbc] (...) WFLYJCA0018: Started Driver service with driver-name = postgresql-jdbc3.jar

Agregar fuente de datos

Para agregar una fuente de datos para que la use EJBCA, ejecute los comandos en JBoss CLI según los ejemplos a continuación.

Tenga en cuenta que --driver-name debe ser el mismo que el nombre del archivo JAR que copió en el paso anterior. --jndi-name se define mediante la propiedad datasource.jndi-name en database.properties , y el valor predeterminado se utiliza en el siguiente ejemplo. --user-name y --password definen el nombre de usuario y la contraseña del usuario de la base de datos EJBCA. Corresponden al nombre de usuario y la contraseña definidos por las propiedades database.username y database.password en database.properties . En producción, esta contraseña debe cambiarse a una contraseña "real".

MariaDB

Para MariaDB, ejecute lo siguiente:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/credential-store=defaultCS:add-alias(alias=dbPassword, secret-value="ejbca")'
/opt/wildfly/bin/jboss-cli.sh --connect 'data-source add --name=ejbcads --driver-name="mariadb-java-client.jar" --connection-url="jdbc: mysql://127.0.0.1:3306/ejbca " --jndi-name="java:/EjbcaDS" --use-ccm=true --driver-class="org.mariadb.jdbc.Driver" --user-name="ejbca" --credential-reference={store=defaultCS, alias=dbPassword} --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;"'
/opt/wildfly/bin/jboss-cli.sh --connect ':reload'

imágenes/s/-2y7bau/8703/189cb2l/_/imagenes/iconos/emoticonos/advertencia.svg Espere a que se complete la recarga verificando el registro del servidor o el resultado de :read-attribute(name=server-state) antes de continuar.

PostgreSQL

Para PostgreSQL, ejecute lo siguiente:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/credential-store=defaultCS:add-alias(alias=dbPassword, secret-value="foo123")'
/opt/wildfly/bin/jboss-cli.sh --connect 'data-source add --name=ejbcads --driver-name="org.postgresql.Driver" --connection-url="jdbc:postgresql://127.0.0.1/ejbca" --jndi-name="java:/EjbcaDS" --use-ccm=true --driver-name="postgresql.jar" --driver-class="org.postgresql.Driver" --user-name="ejbca" --credential-reference={store=defaultCS, alias=dbPassword} --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;"'
/opt/wildfly/bin/jboss-cli.sh --connect ':reload'

imágenes/s/-2y7bau/8703/189cb2l/_/imagenes/iconos/emoticonos/advertencia.svg Espere a que se complete la recarga verificando el registro del servidor o el resultado de :read-attribute(name=server-state) antes de continuar.

Otras bases de datos

Si está utilizando otro tipo de base de datos, adapte la declaración anterior con los valores correctos --driver-name , --connection-url, --driver-class y --check-valid-connection-sql .

Configurar WildFly Remoting

EJBCA necesita usar JBoss Remoting para que la CLI de EJBCA funcione. Configúrelo para usar un puerto 4447 independiente y elimine cualquier otra dependencia de la comunicación remota, excepto la que EJBCA necesita.

/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=remoting/http-connector=http-remoting-connector:write-attribute(name=connector-ref,value=remoting)'
/opt/wildfly/bin/jboss-cli .sh --connect '/socket-binding-group=standard-sockets/socket-binding=remoting:add(port=4447,interface=management)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=undertow/server=default-server/http-listener=remoting:add(socket-binding=remoting,enable-http2=true)'
/opt/wildfly/bin/jboss-cli .sh --connect ':reload'

imágenes/s/-2y7bau/8703/189cb2l/_/imagenes/iconos/emoticonos/advertencia.svg Espere a que se complete la recarga verificando el registro del servidor o el resultado de :read-attribute(name=server-state) antes de continuar.

Configurar el registro

Configure el registro en JBoss para poder cambiarlo dinámicamente. Para sistemas de producción, se recomienda el nivel de registro INFO:

/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=logging/logger=org.ejbca:add(level=INFO)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=logging/logger=org.cesecore:add(level=INFO)'

Para habilitar posteriormente el nivel de registro DEBUG, si es necesario, utilice lo siguiente:

/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=logging/logger=org.ejbca:write-attribute(name=level, value=DEBUG)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=logging/logger=org.cesecore:write-attribute(name=level, value=DEBUG)'

Configuración de registro adicional

Es posible que también desees agregar la siguiente configuración:

/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=logging/logger=org.jboss:add(level=WARN)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=logging/logger=org.cesecore.config.ConfigurationHolder:add(level=WARN)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=logging/logger=org.hibernate.dialect.H2Dialect:add(level=ERROR)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=logging/logger=org.wildfly:add(level=WARN)'

Eliminar archivos de registro antiguos

Los archivos de registro se rotan diariamente de forma predeterminada, pero los antiguos no se eliminan automáticamente. Puede eliminarlos mediante una tarea programada:

/etc/cron.daily/wildfly
#!/bin/sh
# Remove log files older than 7 days
find /opt/wildfly/standalone/log/ - type f -mtime +7 -name 'server.log*' -execdir rm -- '{}' \;

Hacer que el archivo sea ejecutable:

chmod +x /etc/cron.daily/wildfly

Configuración del receptor HTTP(S) con separación de 3 puertos

La siguiente sección explica cómo configurar Undertow con una separación de tres puertos. El puerto 8080 se utiliza para HTTP (tráfico sin cifrar), el 8442 para HTTPS (cifrado) sin autenticación de servidor, y el 8443 para HTTP con autenticación de servidor y cliente.

Eliminar la configuración TLS y HTTP existente

Ejecute los siguientes comandos en JBoss CLI para eliminar la configuración TLS y HTTP existente (solo para estar seguro):

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/http-listener=default:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/https-listener=https:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/socket-binding-group=standard-sockets/socket-binding=http:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/socket-binding-group=standard-sockets/socket-binding=https:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect ':reload'

imágenes/s/-2y7bau/8703/189cb2l/_/imagenes/iconos/emoticonos/advertencia.svg Espere a que se complete la recarga verificando el registro del servidor o el resultado de :read-attribute(name=server-state) antes de continuar.

Agregar nuevas interfaces y sockets

Para agregar nuevas interfaces y sockets, utilice lo siguiente:

/opt/wildfly/bin/jboss-cli .sh --connect '/interface=http:add(inet-address="0.0.0.0")'
/opt/wildfly/bin/jboss-cli .sh --connect '/interface=httpspub:add(inet-address="0.0.0.0")'
/opt/wildfly/bin/jboss-cli .sh --connect '/interface=httpspriv:add(inet-address="0.0.0.0")'
/opt/wildfly/bin/jboss-cli .sh --connect '/socket-binding-group=standard-sockets/socket-binding=http:add(port="8080",interface="http")'
/opt/wildfly/bin/jboss-cli .sh --connect '/socket-binding-group=standard-sockets/socket-binding=httpspub:add(port="8442",interface="httpspub")'
/opt/wildfly/bin/jboss-cli .sh --connect '/socket-binding-group=standard-sockets/socket-binding=httpspriv:add(port="8443",interface="httpspriv")'

Configurar TLS

Configure TLS según las siguientes instrucciones. Actualice la contraseña del almacén de claves de keystore.jks para que coincida con httpsserver.password y la contraseña del almacén de confianza de truststore.jks para que coincida con java.truststore en web.properties .

Asegúrese de que las contraseñas del almacén de claves y del almacén de confianza en esta sección sean correctas para que los comandos no fallen. En producción, las contraseñas deben cambiarse a contraseñas "reales".

/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=elytron/credential-store=defaultCS:add-alias(alias=httpsKeystorePassword, secret-value="serverpwd")'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=elytron/credential-store=defaultCS:add-alias(alias=httpsTruststorePassword, secret-value="changeit")'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=elytron/key-store=httpsKS:add(path="keystore/keystore.jks",relative-to=jboss.server.config.dir,credential-reference={store=defaultCS, alias=httpsKeystorePassword},type=JKS)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=elytron/key-store=httpsTS:add(path="keystore/truststore.jks",relative-to=jboss.server.config.dir,credential-reference={store=defaultCS, alias=httpsTruststorePassword},type=JKS)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=elytron/key-manager=httpsKM:add(key-store=httpsKS,algorithm="SunX509",credential-reference={store=defaultCS, alias=httpsKeystorePassword})'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=elytron/trust-manager=httpsTM:add(key-store=httpsTS)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=elytron/server-ssl-context=httpspub:add(key-manager=httpsKM,protocols=["TLSv1.2"],use-cipher-suites-order=false,cipher-suite-filter="TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256")'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=elytron/server-ssl-context=httpspriv:add(key-manager=httpsKM,protocols=["TLSv1.2"],use-cipher-suites-order=false,cipher-suite-filter="TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",trust-manager=httpsTM,need-client-auth=true)'

Agregar oyentes HTTP(S)

Para agregar oyentes HTTP(S):

/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=undertow/server=default-server/http-listener=http:add(socket-binding="http", redirect-socket="httpspriv")'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=undertow/server=default-server/https-listener=httpspub:add(socket-binding="httpspub", ssl-context="httpspub", max-parameters=2048)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=undertow/server=default-server/https-listener=httpspriv:add(socket-binding="httpspriv", ssl-context="httpspriv", max-parameters=2048)'
/opt/wildfly/bin/jboss-cli .sh --connect ':reload'

imágenes/s/-2y7bau/8703/189cb2l/_/imagenes/iconos/emoticonos/advertencia.svg Espere a que se complete la recarga verificando el registro del servidor o el resultado de :read-attribute(name=server-state) antes de continuar.

Configuración del comportamiento del protocolo HTTP

A continuación se muestra un ejemplo de configuración del comportamiento del protocolo HTTP.

Si está utilizando solicitudes GET de OCSP, es necesario configurar la codificación de URI y permitir la codificación para consultas y barras invertidas.

Los siguientes comandos garantizan que la dirección en el WSDL EJBCA WS coincida con el nombre de host y el puerto que el cliente utiliza para acceder al servidor.

/opt/wildfly/bin/jboss-cli .sh --connect '/system-property=org.apache.catalina.connector.URI_ENCODING:add(value="UTF-8")'
/opt/wildfly/bin/jboss-cli .sh --connect '/system-property=org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING:add(value=true)'
/opt/wildfly/bin/jboss-cli .sh --connect '/system-property=org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH:add(value=true)'
/opt/wildfly/bin/jboss-cli .sh --connect '/system-property=org.apache.tomcat.util.http.Parameters.MAX_COUNT:add(value=2048)'
/opt/wildfly/bin/jboss-cli .sh --connect '/system-property=org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH:add(value=true)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=webservices:write-attribute(name=wsdl-host, value=jbossws.undefined.host)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=webservices:write-attribute(name=modify-wsdl-address, value=true)'
/opt/wildfly/bin/jboss-cli .sh --connect ':reload'

imágenes/s/-2y7bau/8703/189cb2l/_/imagenes/iconos/emoticonos/advertencia.svg Espere a que se complete la recarga verificando el registro del servidor o el resultado de :read-attribute(name=server-state) antes de continuar.

Configuración opcional

Las siguientes secciones cubren configuraciones opcionales.

Eliminar contenido de bienvenida

Elimina la página de bienvenida codificada en WildFly.

/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=undertow/server=default-server/host=default-host/location="\/":remove()'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=undertow/configuration=handler/file=welcome-content:remove()'
/opt/wildfly/bin/jboss-cli .sh --connect ':reload'

imágenes/s/-2y7bau/8703/189cb2l/_/imagenes/iconos/emoticonos/advertencia.svg Espere a que se complete la recarga verificando el registro del servidor o el resultado de :read-attribute(name=server-state) antes de continuar.

También puedes eliminar los archivos reales y ahorrar espacio en disco con:

rm -rf /opt/wildfly/welcome-content/

Redirigir a la aplicación para URL desconocidas

Las URL conocidas para EJBCA comienzan con /ejbca/, /crls, /certificates o /.well-known/ (EST y ACME) según el siguiente ejemplo:

/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=undertow/configuration=filter/rewrite=redirect-to-app:add(redirect=true,target="/ejbca/")'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=undertow/server=default-server/host=default-host/filter-ref=redirect-to-app:add(predicate="method(GET) and not path-prefix(/ejbca,/crls,/certificates,/.well-known) and not equals({\%{LOCAL_PORT}, 4447})")'
/opt/wildfly/bin/jboss-cli .sh --connect ':reload'

imágenes/s/-2y7bau/8703/189cb2l/_/imagenes/iconos/emoticonos/advertencia.svg Espere a que se complete la recarga verificando el registro del servidor o el resultado de :read-attribute(name=server-state) antes de continuar.

Reescritura de URL para el servlet CRL

Desde EJBCA 7.2, se ha eliminado la posibilidad de personalizar la URL del servlet del almacén de CRL. Para más información, consulte ECA-7059 y las Notas de actualización de EJBCA 7.2 .

Sin embargo, puede descargar CRL en una URL diferente agregando una regla de reescritura en Undertow (consulte la Referencia del modelo de JBoss EAP 7.2) . Por ejemplo, para permitir que un cliente descargue CRL desde la URL /ejbca/crls/ en lugar de /ejbca/publicweb/crls/ , agregue la siguiente configuración:

/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=undertow/configuration=filter/rewrite=crl-rewrite:add(target="/ejbca/publicweb/crls/$${1}")'
/opt/wildfly/bin/jboss-cli .sh --connect "/subsystem=undertow/server=default-server/host=default-host/filter-ref=crl-rewrite:add(predicate=\"method(GET) and regex('/crls/(.*)')\")"
/opt/wildfly/bin/jboss-cli .sh --connect ':reload'

imágenes/s/-2y7bau/8703/189cb2l/_/imagenes/iconos/emoticonos/advertencia.svg Espere a que se complete la recarga verificando el registro del servidor o el resultado de :read-attribute(name=server-state) antes de continuar.

Habilitar la comprobación de revocación de OCSP

WildFly puede comprobar la validez de los certificados de cliente comparándolos con el respondedor OCSP definido por la extensión AIA del certificado:

/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=elytron/trust-manager=httpsTM:write-attribute(name=ocsp, value={})'
/opt/wildfly/bin/jboss-cli .sh --connect ':reload'

imágenes/s/-2y7bau/8703/189cb2l/_/imagenes/iconos/emoticonos/advertencia.svg Espere a que se complete la recarga verificando el registro del servidor o el resultado de :read-attribute(name=server-state) antes de continuar.

Eliminar la fuente de datos ExampleDS

Para eliminar opcionalmente la fuente de datos ExampleDS:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=ee/service=default-bindings:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect 'data-source remove --name=ExampleDS'
/opt/wildfly/bin/jboss-cli.sh --connect ':reload'

imágenes/s/-2y7bau/8703/189cb2l/_/imagenes/iconos/emoticonos/advertencia.svg Espere a que se complete la recarga verificando el registro del servidor o el resultado de :read-attribute(name=server-state) antes de continuar.

Eliminar subsistemas y extensiones innecesarios

Para eliminar opcionalmente los subsistemas y extensiones innecesarios:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=jdr:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=sar:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=jmx:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=pojo:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=ee-security:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=microprofile-metrics-smallrye:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=microprofile-health-smallrye:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=microprofile-opentracing-smallrye:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/extension=org.wildfly.extension.microprofile.health-smallrye:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/extension=org.wildfly.extension.microprofile.opentracing-smallrye:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/extension=org.jboss.as.jdr:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/extension=org.jboss.as.jmx:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/extension=org.jboss.as.sar:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/extension=org.jboss.as.pojo:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/extension=org.wildfly.extension.ee-security:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=distributable-web:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=infinispan/cache-container=ejb:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=infinispan/cache-container=server:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=ejb3/cache=distributable:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=ejb3/passivation-store=infinispan:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=security/security-domain=jaspitest:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=datasources/jdbc-driver=h2:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect ':reload'

imágenes/s/-2y7bau/8703/189cb2l/_/imagenes/iconos/emoticonos/advertencia.svg Espere a que se complete la recarga verificando el registro del servidor o el resultado de :read-attribute(name=server-state) antes de continuar.

Habilitar el conector AJP

Solo es necesario habilitar el conector AJP si finaliza la conexión TLS en un proxy (como Apache o nginx) que se ejecuta delante de WildFly:

/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=undertow/server=default-server/ajp-listener=ajp-listener:add(socket-binding=ajp, scheme=https, enabled=true)'

Agregar soporte para enviar correo electrónico

Para añadir compatibilidad con el envío de correo electrónico (SMTP), configure EjbcaMail. Especifique el nombre de host, el puerto, la dirección y las credenciales SMTP según el siguiente ejemplo:

/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=elytron/credential-store=defaultCS:add-alias(alias=smtpPassword, secret-value="foo123")'
/opt/wildfly/bin/jboss-cli .sh --connect '/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=ejbca-mail-smtp:add(port="993", host="my.mail.server")'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=mail/mail-session="java:/EjbcaMail":add(jndi-name=java:/EjbcaMail, from=noreply@mymail)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=mail/mail-session="java:/EjbcaMail"/server=smtp:add(outbound-socket-binding-ref=ejbca-mail-smtp, tls=true, username=smtpuser, credential-reference={store=defaultCS, alias=smtpPassword})'
/opt/wildfly/bin/jboss-cli .sh --connect ':reload'

Implementar solo al inicio

Históricamente, los servidores de aplicaciones no suelen limpiar la memoria de implementaciones anteriores, por lo que se desaconseja la reimplementación en caliente en producción. Para evitar la implementación manual con la interfaz de administración, puede especificar que el directorio de implementación se escanee una vez al iniciar el servidor de aplicaciones estableciendo el intervalo de escaneo en 0. Esto también evita que un atacante cargue un archivo JAR malicioso colocándolo en el directorio de implementaciones .

/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=deployment-scanner/scanner=default:write-attribute(name=scan-interval,value=0)'

Aumentar el tiempo de espera de implementación

Si utiliza HSM con autenticación de tarjeta inteligente o si la base de datos necesita reindexarse al iniciar WildFly, es posible que deba aumentar el tiempo de espera de implementación para poder implementar EJBCA correctamente. El tiempo de espera de implementación se especifica en segundos; el comando a continuación lo establece en 5 minutos.

/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=deployment-scanner/scanner=default:write-attribute(name=deployment-timeout,value=300)'

Deshabilitar la consola web de administración

Si de todos modos solo planeas usar la CLI de JBoss, hay pocos motivos para mantenerlo.

/opt/wildfly/bin/jboss-cli .sh --connect '/core-service=management/management-interface=http-interface:write-attribute(name=console-enabled,value=false)'
/opt/wildfly/bin/jboss-cli .sh --connect ':reload'

imágenes/s/-2y7bau/8703/189cb2l/_/imagenes/iconos/emoticonos/advertencia.svg Espere a que se complete la recarga verificando el registro del servidor o el resultado de :read-attribute(name=server-state) antes de continuar.

Aumentar el tamaño máximo de carga

Aumente el tamaño máximo de las solicitudes POST a 25 MB. Esto puede ser necesario si necesita cargar listas de bloqueo de dominios extensas, paquetes zip con perfiles, archivos de estado, etc.

/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=undertow/server=default-server/http-listener=http/:write-attribute(name=max-post-size,value=25485760)'
/opt/wildfly/bin/jboss-cli .sh --connect ':reload'

Habilitar el registro de auditoría de WildFly

WildFly puede auditar los cambios en los registros del modelo de gestión y generar eventos de registro de auditoría en formato JSON en el archivo /opt/wildfly/standalone/data/audit-log.log . El registro de auditoría está deshabilitado de forma predeterminada. Para habilitarlo, ejecute:

/opt/wildfly/bin/jboss-cli.sh --connect '/core-service=management/access=audit/logger=audit-log:write-attribute(name=enabled,value=true)'

Configurar el registro de OCSP

Si ha habilitado el registro de auditoría de OCSP o el registro de transacciones de OCSP , debe configurar un registrador asincrónico en WildFly para obtener el mejor rendimiento.

Para el registro de transacciones de OCSP:

/subsystem=logging/logger=org.cesecore.certificates.ocsp.logging.TransactionLogger:add(use-parent-handlers= false )
/subsystem=logging/logger=org.cesecore.certificates.ocsp.logging.TransactionLogger:write-attribute(name=level, value=INFO)
/subsystem=logging/async-handler=ocsp-tx-async:add(queue-length= "100" )
/subsystem=logging/async-handler=ocsp-tx-async:write-attribute(name=level, value=DEBUG)
/subsystem=logging/async-handler=ocsp-tx-async:write-attribute(name= "overflow-action" , value= "BLOCK" )
/subsystem=logging/logger=org.cesecore.certificates.ocsp.logging.TransactionLogger:add-handler(name=ocsp-tx-async)
/subsystem=logging/periodic-rotating-file-handler=ocsp-tx:add(autoflush= true , append= true , suffix= ".yyyy-MM-dd" , file={path=ocsp-tx.log,relative-to=jboss.server.log.dir})
/subsystem=logging/async-handler=ocsp-tx-async:add-handler(name=ocsp-tx)

Para el registro de auditoría de OCSP:

/subsystem=logging/logger=org.cesecore.certificates.ocsp.logging.AuditLogger:add(use-parent-handlers= false )
/subsystem=logging/logger=org.cesecore.certificates.ocsp.logging.AuditLogger:write-attribute(name=level, value=INFO)
/subsystem=logging/async-handler=ocsp-audit-async:add(queue-length= "100" )
/subsystem=logging/async-handler=ocsp-audit-async:write-attribute(name=level, value=DEBUG)
/subsystem=logging/async-handler=ocsp-audit-async:write-attribute(name= "overflow-action" , value= "BLOCK" )
/subsystem=logging/logger=org.cesecore.certificates.ocsp.logging.AuditLogger-handler(name=ocsp-audit-async)
/subsystem=logging/periodic-rotating-file-handler=ocsp-audit:add(autoflush= true , append= true , suffix= ".yyyy-MM-dd" , file={path=ocsp-audit.log,relative-to=jboss.server.log.dir})
/subsystem=logging/async-handler=ocsp-audit-async:add-handler(name=ocsp-audit)

Archivar archivos de registro rotados para ahorrar espacio en disco mediante un trabajo cron:

/etc/cron.daily/archivo-rotated-ocsp-logs.sh
#!/bin/sh
# Compress the OCSP audit log and the OCSP transaction log after rotation
xz /opt/wildfly/standalone/log/ocsp-tx .log.*
xz /opt/wildfly/standalone/log/ocsp-audit .log.*

Hacer que el archivo sea ejecutable:

chmod +x /etc/cron.daily/archive-rotated-ocsp-logs.sh

Inscripción en ACME

WildFly puede inscribirse para obtener certificados TLS mediante ACME. Si se inscribe desde EJBCA, consulte la documentación de EJBCA para saber cómo habilitar y configurar ACME .

  1. Si se inscribe contra su PKI interna, asegúrese de que Java confíe en ella.

    Reemplace <ROOT_NAME> con el nombre de su CA raíz y <ROOT_CA_PATH> con la ruta al certificado de CA raíz en formato PEM. La ubicación de su archivo cacerts ( /usr/lib/jvm/java-11-openjdk-amd64/lib/security/cacerts ) puede variar.

    sudo keytool -importcert -noprompt -trustcacerts -alias <ROOT_NAME> -file <ROOT_CA_PATH> -keystore /usr/lib/jvm/java- 11 -openjdk-amd64/lib/security/cacerts -storepass changeit
  2. Cree un almacén de claves donde se almacenará el par de claves de la cuenta ACME.

    /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/credential-store=defaultCS:add-alias(alias=accountsPassword, secret-value="foo123")'
    /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/key-store=accountsKS:add(path=accounts.jks,relative-to=jboss.server.config.dir,credential-reference={store=defaultCS, alias=accountsPassword},type=JKS)'
  3. Define el directorio ACME a utilizar.

    Reemplace <ACME_DIRECTORY_URL> y <ACME_DIRECTORY_URL_STAGING> con la URL del directorio ACME para producción y ensayo, respectivamente. Si se inscribe directamente en un servidor EJBCA, use algo como https://hostname:8442/ejbca/acme/directory .

    /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/certificate-authority=AcmeCA:add(url="<ACME_DIRECTORY_URL>",staging-url="<ACME_DIRECTORY_URL_STAGING>")'
  4. Registre una cuenta ACME con la CA.

    Reemplace <HOSTNAME> con el nombre de host de su máquina y <EMAIL> con su dirección de correo electrónico.

    /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/certificate-authority-account=AcmeAccount:add(certificate-authority=AcmeCA,alias=<HOSTNAME>,key-store=accountsKS,contact-urls=[mailto:<EMAIL>])'
  5. Inscríbete para obtener un certificado.

    Reemplace <HOSTNAME> con el nombre de host de su máquina.

    /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/key-store=httpsKS:obtain-certificate(alias=<HOSTNAME>,domain-names=[<HOSTNAME>],certificate-authority-account=AcmeAccount,agree-to-terms-of-service)'

Ajuste del rendimiento

La siguiente sección describe la configuración de WildFly para maximizar el rendimiento de EJBCA. La configuración óptima puede variar según la instalación y debe ajustarse manualmente. Sin embargo, la configuración predeterminada suele ser un buen punto de partida. También debería considerar aumentar la memoria RAM (heap) para las instancias de EJBCA con alta carga a aproximadamente 4 GB.

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=io/worker=default/:write-attribute(name=task-core-threads,value=25)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=io/worker=default/:write-attribute(name=task-max-threads,value=100)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=io/worker=default/:write-attribute(name=io-threads,value=100)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=ejb3/strict-max-bean-instance-pool=slsb-strict-max-pool:undefine-attribute(name=derive-size)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=ejb3/strict-max-bean-instance-pool=slsb-strict-max-pool:write-attribute(name=max-pool-size, value=32)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=datasources/data-source=ejbcads/:write-attribute(name=max-pool-size,value=150)'
/opt/wildfly/bin/jboss-cli.sh --connect ':reload'

imágenes/s/-2y7bau/8703/189cb2l/_/imagenes/iconos/emoticonos/advertencia.svg Espere a que se complete la recarga verificando el registro del servidor o el resultado de :read-attribute(name=server-state) antes de continuar.

Borrar el historial de la línea de comandos

Borre el historial de la línea de comandos para evitar la visualización accidental de contraseñas ingresadas en el almacén de credenciales.

history -c

Crear una instantánea de la configuración

Cree una instantánea de la configuración actual para asegurarse de poder volver a un estado funcional.

/opt/wildfly/bin/jboss-cli .sh --connect ':take-snapshot'

Próximo paso: Implementación de EJBCA

Para obtener instrucciones sobre cómo crear e implementar EJBCA, consulte Implementación de EJBCA.