WildFly 24

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

Descargar WildFly

WildFly puede descargarse como un paquete zip o personalizarse con Galleon. Le recomendamos usar Galleon, ya que solo descarga los componentes necesarios, a diferencia del paquete zip, que incluye todas las configuraciones y módulos JBoss (EJBCA solo utiliza una parte de la funcionalidad de WildFly).

WildFly generalmente se coloca en la carpeta /opt en los sistemas Linux, y el uso de un enlace simbólico a la carpeta WildFly hace que sea fácil cambiar a una nueva versión de WildFly simplemente anulando el enlace simbólico.

Usando el paquete Zip

Debe usar el paquete Jakarta EE Full & Web Distribution de WildFly al descargar el archivo zip. Si aún no ha descargado WildFly, puede usar el siguiente comando:

Descargue y descomprima el paquete zip de WildFly
wget https: //download .jboss.org /wildfly/24 .0.1.Final /wildfly-24 .0.1.Final.zip -O /tmp/wildfly-24 .0.1.Final.zip
unzip -q /tmp/wildfly-24 .0.1.Final.zip -d /opt/
ln -snf /opt/wildfly-24 .0.1.Final /opt/wildfly

Usando Galleon

En lugar de descargar el paquete zip de WildFly que contiene todo (todas las configuraciones de servidor predeterminadas y todos los módulos JBoss), al utilizar las herramientas Galleon puede elegir instalar solo los componentes que necesita EJBCA.

Descargar Galleon

Galleon se proporciona como un paquete zip desde GitHub que puedes descargar y ejecutar sin ninguna instalación.

Descargar Galleon
wget https: //github .2.8.Final .com /wildfly/galleon/releases/download/4 /galleon-4 .2.8.Final.zip -O /tmp/galleon-4 .2.8.Final.zip
unzip -q /tmp/galleon-4 .2.8.Final.zip -d /tmp/
cd /tmp/galleon-4 .2.8.Final /bin

Capas utilizadas por EJBCA

La siguiente tabla enumera las capas de Galleon utilizadas por EJBCA.

La capa de herramientas principales incluirá la CLI de JBoss y Elytron, lo cual resulta útil si es necesario ajustar posteriormente el almacén de credenciales de Elytron o el archivo de configuración standalone.xml . Si no lo necesita, excluya las capas de herramientas principales y de administración y añada Elytron por separado. La validación de beans también se puede excluir, pero es recomendable tenerla, al menos en entornos de prueba. La seguridad web basada en Picketbox es necesaria para que EJBCA detecte la autenticación mediante certificados de cliente.

Nombre

Descripción

Dependencias

CDI

Soporte para contextos de Yakarta e inyección de dependencia.

servidor base
validación de bean (opcional)

herramientas básicas

Soporte para scripts de lanzamiento y archivos de configuración jboss-cli , add-user y elytron-tool .

gestión (opcional)

fuentes de datos

Soporte para fuentes de datos.

actas

escáner de implementación

Soporte para escaneo de directorio de implementación.

servidor base

descubrimiento

Apoyo al descubrimiento.

servidor base

ee

Soporte para funcionalidad común en la plataforma Jakarta EE.

jsonb (opcional)
nombrando

ejb

Soporte para Jakarta Enterprise Beans, excluyendo el protocolo IIOP.

ejb-lite
mensajería-activemq
comunicación remota
adaptadores de recursos
resaca

yo

Soporte para trabajadores XNIO y grupos de buffer.

servidor base

jaxrs

Soporte para JAXRS.

servidor web

JPA

Soporte para JPA (utilizando la última versión de Hibernate compatible con WildFly).
Alternativa: jpa-distributed

validación de bean (opcional)
fuentes de datos

jsf

Soporte para Jakarta Server Faces.

validación de bean (opcional)
cdi (opcional)
servidor web

explotación florestal

Soporte para el subsistema de registro.

servidor base

correo

Soporte para Jakarta Mail.

servidor base
nombrando

gestión

Soporte para acceso remoto a interfaces de gestión protegidas mediante Elytron.

elitrono

servicios web

Compatibilidad con servicios web XML de Jakarta

ejb-lite (opcional)
mensajería-activemq (opcional)
servidor web

seguridad heredada

Compatibilidad con seguridad web heredada basada en Picketbox.

nombrando
bóveda

Descargar y configurar WildFly usando Galleon

Galleon puede descargar y extraer WildFly al directorio especificado mediante el comando de instalación . EJBCA se ejecuta en un servidor independiente, y solo se necesita esta configuración. Para una instalación típica, utilice la siguiente receta de CLI:

Descargue y cree WildFly usando Galleon
. /galleon .sh install wildfly:current #24.0.1.Final --dir=/opt/wildfly-24.0.1.Final --default-configs=standalone/standalone.xml --layers=cdi,core-tools,datasources,deployment-scanner,discovery,ee,-jsonb,ejb,io,jaxrs,jpa,jsf,logging,mail,management,webservices,legacy-security
ln -snf /opt/wildfly-24 .0.1.Final /opt/wildfly

Al compilar EJBCA desde el código fuente, necesita tener bin/client/jboss-client.jar en el directorio de WildFly durante la compilación para que las herramientas CLI funcionen. Este archivo jar no está disponible al compilar WildFly con Galleon, pero puede obtenerlo manualmente del repositorio central de Maven.

mkdir /opt/wildfly/bin/client
wget https: //repo1.maven.org/maven2/org/wildfly/wildfly-client-all/24.0.1.Final/wildfly-client-all-24.0.1.Final.jar -O /opt/wildfly/bin/client/jboss-client.jar

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.

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

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 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 '/.*org.jboss.resteasy.resteasy-crypto.*/d' /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/

Crear una configuración personalizada

Reemplace /opt/wildfly/bin/standalone.conf con la siguiente plantilla Jinja2.

/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 -XX:+HeapDumpOnOutOfMemoryError"
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. Recomendamos 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 número único. El subsistema de transacciones utiliza este ID para garantizar que el gestor de transacciones solo recupere ramas que coincidan con el identificador especificado. Es fundamental que este identificador sea único entre las instancias de WildFly que comparten un almacén de objetos o acceden a gestores de recursos comunes (es decir, cuando varias instancias EJBCA acceden a la misma base de datos).

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 zip de 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 debemos 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 -r -s /bin/false wildfly
chown -R wildfly:wildfly /opt/wildfly-24 .0.1.Final/

El directorio docs no existe al usar Galleon. Como referencia, así se ven los archivos faltantes:

/opt/wildfly/docs/contrib/scripts/systemd/launch.sh
#!/bin/bash
if [ "x$WILDFLY_HOME" = "x" ]; then
WILDFLY_HOME= "/opt/wildfly"
fi
if [[ "$1" == "domain" ]]; then
$WILDFLY_HOME /bin/domain .sh -c $2 -b $3
else
$WILDFLY_HOME /bin/standalone .sh -c $2 -b $3
fi
/opt/wildfly/docs/contrib/scripts/systemd/wildfly.servicio
[Unit]
Description=The WildFly Application Server
After=syslog.target network.target
Before=httpd.service
[Service]
Environment=LAUNCH_JBOSS_IN_BACKGROUND=1
EnvironmentFile=- /etc/wildfly/wildfly .conf
User=wildfly
LimitNOFILE=102642
PIDFile= /var/run/wildfly/wildfly .pid
ExecStart= /opt/wildfly/bin/launch .sh $WILDFLY_MODE $WILDFLY_CONFIG $WILDFLY_BIND
StandardOutput=null
[Install]
WantedBy=multi-user.target
/opt/wildfly/docs/contrib/scripts/systemd/wildfly.conf
# The configuration you want to run
WILDFLY_CONFIG=standalone.xml
# The mode you want to run
WILDFLY_MODE=standalone
# The address to bind to
WILDFLY_BIND=0.0.0.0

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 .

mkdir /opt/wildfly/standalone/configuration/keystore
chown wildfly:wildfly /opt/wildfly/standalone/configuration/keystore
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=elytron/credential-store=defaultCS:add(location=keystore/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

En la mayoría de los sistemas de gestión de bases de datos, el controlador JDBC se puede agregar implementándolo en caliente en el directorio de implementación. WildFly lo recogerá y lo implementará para que podamos 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.

MariaDB

Descargar e implementar el controlador JDBC de MariaDB
wget https: /mariadb-java-client-2 /1785291/Connectors/java/connector-java-2 //dlm .mariadb.com /opt/wildfly/standalone/deployments/mariadb-java-client .7.4.jar -O .7.4 .jar

PostgreSQL

Descargar e implementar el controlador JDBC de PostgreSQL
wget https: .3.1.jar -O .jar //jdbc .postgresql.org /opt/wildfly/standalone/deployments/postgresql-jdbc4 /download/postgresql-42

Microsoft SQL Server

Descargar e implementar el controlador JDBC de Microsoft SQL Server
wget https: //github .com .4.1 /microsoft/mssql-jdbc/releases/download/v9 /mssql-jdbc-9 .4.1.jre11.jar -O /opt/wildfly/standalone/deployments/mssql-jdbc .jre11.jar

Otras bases de datos

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.driver.class (version XYZ)
... INFO [org.jboss.as.connector.deployers.jdbc] (...) WFLYJCA0022: Started Driver service with driver-name = jdbc-driver.jar

Agregar una 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.

Los parámetros --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 --connection-url="jdbc: mysql://127.0.0.1:3306/ejbca " --jndi-name="java:/EjbcaDS" --use-ccm=true --driver-name="mariadb-java-client.jar" --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="ejbca")'
/opt/wildfly/bin/jboss-cli.sh --connect 'data-source add --name=ejbcads --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.

Microsoft SQL Server

Para Microsoft SQL Server, 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 '/subsystem=datasources/data-source=ejbcads:add(connection-url= "jdbc:sqlserver://foobar.YOUR.DOMAIN:1433;DatabaseName=ejbca;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;sendStringParametersAsUnicode=false" , min-pool-size= 5 , max-pool-size= 150 , jndi-name= "java:/EjbcaDS" , driver-name=mssql-jdbc.jre11.jar, user-name= "ejbca" , credential-reference={store=defaultCS, alias=dbPassword}, pool-prefill= false , pool-use-strict-min= false , idle-timeout-minutes= 2 )
/opt/wildfly/bin/jboss-cli.sh --connect ':reload'

Microsoft SQL Server con autenticación Kerberos

Cree un archivo de configuración para Kerberos.

Reemplace YOUR.DOMAIN con su dominio de Windows y asegúrese de que foobar.YOUR.DOMAIN apunte a un servidor válido.

/etc/krb5.conf
# To opt out of the system crypto-policies configuration of krb5, remove the
# symlink at /etc/krb5.conf.d/crypto-policies which will not be recreated.
includedir /etc/krb5 .conf.d/
[logging]
default = FILE: /var/log/krb5libs .log
kdc = FILE: /var/log/krb5kdc .log
admin_server = FILE: /var/log/kadmind .log
[libdefaults]
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
spake_preauth_groups = edwards25519
default_realm = YOUR.DOMAIN
default_tkt_enctypes = aes256-cts aes256-cts-hmac-sha1-96 aes128-cts
default_tgs_enctypes = aes256-cts aes256-cts-hmac-sha1-96 aes128-cts
permitted_enctypes = aes256-cts aes256-cts-hmac-sha1-96 aes128-cts
[realms]
YOUR.DOMAIN = {
kdc = foobar.YOUR.DOMAIN
default_domain = foobar.YOUR.DOMAIN
admin_server = foobar.YOUR.DOMAIN
}
[domain_realm]
.your.domain = YOUR.DOMAIN
your.domain = YOUR.DOMAIN


Configurar las propiedades del sistema WildFly.

/opt/wildfly/bin/jboss-cli.sh --connect '/system-property=java.security.krb5.conf:add(value="/etc/krb5.conf")'
/opt/wildfly/bin/jboss-cli.sh --connect '/system-property=sun.security.krb5.debug:add(value="false")'
/opt/wildfly/bin/jboss-cli.sh --connect '/system-property=sun.security.spnego.debug:add(value="false")'

Configurar Kerberos usando Elytron.

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/kerberos-security-factory=ejbca-db-krbsf:add(debug= false , principal=USER @YOUR .DOMAIN, path=wildfly.keytab, relative-to=jboss.server.config.dir, request-lifetime=- 1 , obtain-kerberos-ticket= true , server= false )
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/authentication-configuration=kerberos-conf:add(kerberos-security-factory=ejbca-db-krbsf)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/authentication-context=ejbca-ds-context:add(match-rules=[{authentication-configuration=kerberos-conf}])'

Cree una fuente de datos con un contexto de autenticación Kerberos.

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=datasources/data-source=ejbcads:add(connection-url= "jdbc:sqlserver://foobar.YOUR.DOMAIN:1433;DatabaseName=ejbca;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;sendStringParametersAsUnicode=false" , min-pool-size= 5 , max-pool-size= 150 , jndi-name= "java:/EjbcaDS" , driver-name=mssql-jdbc.jre11.jar, elytron-enabled= true , authentication-context=ejbca-ds-context, allow-multiple-users= false , pool-prefill= false , pool-use-strict-min= false , idle-timeout-minutes= 2 )
/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 WildFly para poder cambiar dinámicamente el registro mientras el servidor de aplicaciones está en ejecución.

Configuraciones de registro

Elija una de las configuraciones de registro a continuación.

Opción 1 - Registro recomendado

Se recomienda el nivel de registro INFO para org.ejbca y org.cesecore para sistemas de producción.

/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)'

Opción 2 - Registro silencioso

Si prefiere un registro más silencioso, configure WildFly para que solo registre mensajes de registro de auditoría, advertencias y errores.

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

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.as.config:write-attribute(name=level, value=WARN)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=logging/logger=org.jboss.as:add(level=WARN)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=logging/logger=org.wildfly:add(level=WARN)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=logging/logger=org.xnio:add(level=WARN)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=logging/logger=org.hibernate:add(level=WARN)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=logging/logger=org.apache.cxf: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.infinispan:add(level=WARN)'

Agregar registro de acceso

Para registrar todas las solicitudes procesadas por el servidor, similar al registro de acceso de Apache, agregue la siguiente configuración:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/host=default-host/setting=access-log:add(pattern="%h %t \"%r\" %s \"%{i,User-Agent}\"", relative-to=jboss.server.log.dir, directory=access-logs)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=io.undertow.accesslog:add(level=INFO)'

Eliminar el controlador de la consola

El registro de la consola no se utiliza cuando se ejecuta WildFly con systemd, y eliminarlo puede aumentar el rendimiento del registro.

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/root-logger=ROOT:remove-handler(name=CONSOLE)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/console-handler=CONSOLE:remove()'

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/eliminar-registros-antiguos-de-wildfly.sh
#!/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/remove-old-wildfly-logs.sh

Habilitar envío de Syslog

Para enviar adicionalmente el registro del servidor por UDP a un servidor syslog como Graylog o Logstash, configure un controlador de syslog en WildFly. Configure el nombre de host y el puerto del servidor syslog, así como el nivel de registro deseado, según el siguiente ejemplo:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/json-formatter=logstash:add(exception-output-type=formatted, key-overrides=[timestamp="@timestamp"],meta-data=[@version=1])'
/opt/wildfly/bin/jboss-cli.sh --connect "/subsystem=logging/syslog-handler=syslog-shipping:add(app-name=EJBCA,enabled=true,facility=local-use-0,hostname=$(hostname -f),level=INFO,named-formatter=logstash,port=514,server-address=syslog.server,syslog-format=RFC5424)"
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/root-logger=ROOT:add-handler(name=syslog-shipping)'

Habilitar el registro de auditoría en el archivo

Puede escribir el registro de auditoría de EJBCA en un archivo independiente. Por ejemplo, para registrarlo en /opt/wildfly/standalone/log/cesecore-audit.log , rotarlo cada 128 MB y conservar un archivo rotado:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/size-rotating-file-handler=cesecore-audit-log:add(file={path=cesecore-audit.log, relative-to=jboss.server.log.dir}, max-backup-index=1, rotate-size=128m)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.audit.impl.log4j.Log4jDevice:add'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.audit.impl.log4j.Log4jDevice:add-handler(name=cesecore-audit-log)'

Configurar el registro de OCSP

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

Para el registro de transacciones de OCSP:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.certificates.ocsp.logging.TransactionLogger:add(use-parent-handlers=false)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.certificates.ocsp.logging.TransactionLogger:write-attribute(name=level, value=INFO)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/async-handler=ocsp-tx-async:add(queue-length="100")'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/async-handler=ocsp-tx-async:write-attribute(name=level, value=DEBUG)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/async-handler=ocsp-tx-async:write-attribute(name="overflow-action", value="BLOCK")'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.certificates.ocsp.logging.TransactionLogger:add-handler(name=ocsp-tx-async)'
/opt/wildfly/bin/jboss-cli.sh --connect '/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})'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/async-handler=ocsp-tx-async:add-handler(name=ocsp-tx)'

Para el registro de auditoría de OCSP:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.certificates.ocsp.logging.AuditLogger:add(use-parent-handlers=false)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.certificates.ocsp.logging.AuditLogger:write-attribute(name=level, value=INFO)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/async-handler=ocsp-audit-async:add(queue-length="100")'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/async-handler=ocsp-audit-async:write-attribute(name=level, value=DEBUG)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/async-handler=ocsp-audit-async:write-attribute(name="overflow-action", value="BLOCK")'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.certificates.ocsp.logging.AuditLogger:add-handler(name=ocsp-audit-async)'
/opt/wildfly/bin/jboss-cli.sh --connect '/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})'
/opt/wildfly/bin/jboss-cli.sh --connect '/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

Configuración HTTP(S)

La siguiente sección explica cómo configurar HTTP(S) usando Undertow.

Eliminar la configuración TLS y HTTP existente

Ejecute los siguientes comandos en JBoss CLI para eliminar la configuración TLS y HTTP existente:

/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()'
# These two lines are not needed if Galleon was used
/opt/wildfly/bin/jboss-cli.sh --connect '/core-service=management/security-realm=ApplicationRealm/server-identity=ssl: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.

Utilice 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 puerto 8442 para HTTPS (cifrado) con autenticación únicamente del servidor y el puerto 8443 para HTTPS (cifrado) con autenticación tanto del servidor como del cliente.

Agregar nuevas interfaces y sockets

Para agregar nuevas interfaces y sockets, utilice lo siguiente:

Considere vincularse a una interfaz específica en lugar de vincularse a todas las interfaces usando 0.0.0.0 .

/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.

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 evitar fallos en la implementación. En producción, las contraseñas deben cambiarse a contraseñas reales.

Tenga en cuenta que TLS v1.3 solo está disponible cuando se ejecuta JDK 11 o superior.

Configure httpsserver.tokentype=P12 en el archivo de configuración EJBCA web.properties.

/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.p12",relative-to=jboss.server.config.dir,credential-reference={store=defaultCS, alias=httpsKeystorePassword},type=PKCS12)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=elytron/key-store=httpsTS:add(path="keystore/truststore.p12",relative-to=jboss.server.config.dir,credential-reference={store=defaultCS, alias=httpsTruststorePassword},type=PKCS12)'
/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.3","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,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",cipher-suite-names="TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256")'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=elytron/server-ssl-context=httpspriv:add(key-manager=httpsKM,protocols=["TLSv1.3","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,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",cipher-suite-names="TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_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.

Configurar el firewall

Abra los puertos 8080, 8442 y 8443 para el tráfico TCP entrante.

Puertos abiertos en RHEL/CentOS
systemctl enable firewalld --now
firewall-cmd --set- default -zone=dmz
firewall-cmd --zone=dmz --permanent --add-port 8080 /tcp
firewall-cmd --zone=dmz --permanent --add-port 8442 /tcp
firewall-cmd --zone=dmz --permanent --add-port 8443 /tcp
firewall-cmd --reload

Utilice separación de 2 puertos

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

Agregar nuevas interfaces y sockets

Para agregar nuevas interfaces y sockets, utilice lo siguiente:

Considere vincularse a una IP específica en lugar de vincularse a todas las interfaces usando 0.0.0.0 .

/opt/wildfly/bin/jboss-cli .sh --connect '/interface=http:add(inet-address="0.0.0.0")'
/opt/wildfly/bin/jboss-cli .sh --connect '/interface=https: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=https:add(port="8443",interface="https")'

Configurar TLS

Configure TLS según las siguientes instrucciones.

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".

Tenga en cuenta que TLS v1.3 solo está disponible cuando se ejecuta JDK 11 o superior.

/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.p12",relative-to=jboss.server.config.dir,credential-reference={store=defaultCS, alias=httpsKeystorePassword},type=PKCS12)'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=elytron/key-store=httpsTS:add(path="keystore/truststore.p12",relative-to=jboss.server.config.dir,credential-reference={store=defaultCS, alias=httpsTruststorePassword},type=PKCS12)'
/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=https:add(key-manager=httpsKM,protocols=["TLSv1.3","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,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",cipher-suite-names="TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256",trust-manager=httpsTM,want-client-auth=true,authentication-optional=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="https")'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=undertow/server=default-server/https-listener=https:add(socket-binding="https", ssl-context="https", 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.

Configurar el firewall

Abra los puertos 8080 y 8443 para el tráfico TCP entrante.

Puertos abiertos en RHEL/CentOS
systemctl enable firewalld --now
firewall-cmd --set- default -zone=dmz
firewall-cmd --zone=dmz --permanent --add-port 8080 /tcp
firewall-cmd --zone=dmz --permanent --add-port 8443 /tcp
firewall-cmd --reload

Alternativamente, puede abrir el puerto 80 y el puerto 443 y redirigir el tráfico a 8080 y 8443 respectivamente.

Configurar NAT en RHEL/CentOS
systemctl enable firewalld --now
firewall-cmd --set- default -zone=dmz
firewall-cmd --zone=dmz --permanent --add-port 80 /tcp
firewall-cmd --zone=dmz --permanent --add-port 443 /tcp
firewall-cmd --permanent --add-forward-port=port= 80 :proto=tcp:toport= 8080
firewall-cmd --permanent --add-forward-port=port= 443 :proto=tcp:toport= 8443
firewall-cmd --reload

Utilice un HSM

Puede almacenar la clave privada del certificado de cliente TLS en un HSM para mejorar la seguridad y el rendimiento. WildFly incluye el proveedor Sun PKCS11, que permite comunicarse con el HSM mediante PKCS#11.

Primero, cree un archivo de configuración Sun PKCS11 según la siguiente plantilla de Jinja2. Consulte con su proveedor de HSM para obtener más información sobre cómo configurar los atributos PKCS#11.

/opt/wildfly/configuración/independiente/pkcs11.cfg
name = HSM
library = {{ PKCS11_LIBRARY }}
slot = {{ SLOT_NUMBER }}
attributes(*, CKO_PUBLIC_KEY, *) = {
CKA_TOKEN = false
CKA_ENCRYPT = false
CKA_VERIFY = true
CKA_WRAP = false
}
attributes(*, CKO_PRIVATE_KEY, *) = {
CKA_TOKEN = true
CKA_PRIVATE = true
CKA_SENSITIVE = true
CKA_EXTRACTABLE = false
CKA_DECRYPT = false
CKA_SIGN = true
CKA_UNWRAP = false
CKA_DERIVE = false
}

Hacer que el archivo sea legible por WildFly.

chown wildfly:wildfly /opt/wildfly/standalone/configuration/pkcs11.cfg

Guarde el PIN del token en su almacén de credenciales.

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/credential-store=defaultCS:add-alias(alias=hsm,secret-value=123456)'

Cree un cargador de proveedor y un almacén de claves para el proveedor Sun PKCS11.

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/provider-loader=pkcs11:add(class-names=[sun.security.pkcs11.SunPKCS11],path=pkcs11.cfg,relative-to=jboss.server.config.dir,module=sun.jdk)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/key-store=httpsKSInHSM:add(credential-reference={store=defaultCS, alias=hsm},type=PKCS11,providers=pkcs11)'

Genere un par de claves y cree una CSR mediante JBoss CLI. La CSR se almacena en /opt/wildfly/standalone/configuration/keystore .

Clave RSA
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/key-store=httpsKSInHSM:generate-key-pair(alias=tlsKey0001, distinguished-name="CN=hostname", algorithm=RSA, key-size=2048)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/key-store=httpsKSInHSM:generate-certificate-signing-request(alias=tlsKey0001, path=keystore/csr.pem, relative-to=jboss.server.config.dir, signature-algorithm=SHA256withRSA)

Emite el certificado de tu CA preferida y coloca la cadena de certificados junto a la CSR. Luego, instálalo en el token:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/key-store=httpsKSInHSM:import-certificate(alias=tlsKey0001, path=keystore/chain.pem, relative-to=jboss.server.config.dir)'

Cambiar al almacén de claves HSM.

/subsystem=elytron/key-manager=httpsKM:write-attribute(name=key-store,value=httpsKSInHSM)
/subsystem=elytron/key-manager=httpsKM:write-attribute(name=credential-reference,value={store=defaultCS, alias=hsm})

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. Esto no es necesario si se usó Galleon.

/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(priority=1,predicate="method(GET) and not path-prefix(/ejbca,/crls,/certificates,/.well-known) and not equals({\%{LOCAL_PORT}, 4447})")'

Habilitar la seguridad estricta de la capa de transporte HTTP

El encabezado de respuesta HTTP Strict-Transport-Security (HSTS), definido en la RFC 6797, indica al navegador que solo acceda al servidor mediante HTTPS. Si no se están sirviendo recursos del dominio mediante HTTP, como respuestas OCSP, se puede habilitar esta opción para mejorar la seguridad. Empiece con un valor de edad máxima bajo (por ejemplo, 60 segundos) y auméntelo gradualmente.

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/configuration=filter/response-header=hsts:add(header-name="Strict-Transport-Security",header-value="max-age=31536000")'

También debe redirigir el tráfico HTTP a HTTPS. El ejemplo asume que el puerto 80 se usa para HTTP, el puerto 443 para HTTPS y que se puede acceder al servidor mediante el nombre de dominio example.com .

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/configuration=filter/rewrite=http-to-https:add(redirect="true",target="https://example.com:443%U")'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/host=default-host/filter-ref=http-to-https:add(predicate="equals(%p,80)")'

Reescritura de URL

La reescritura de URL permite servir CRLs, certificados de CA y respuestas OCSP en sus propias URL. Esto se puede hacer mediante reglas de reescritura en Undertow .

Reescritura de URL para el servlet de tienda CRL

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

Sin embargo, se puede lograr el mismo resultado configurando Undertow. Por ejemplo, para permitir que un cliente descargue CRLs 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/(.*)')\")"

O si desea vincular directamente a una CRL específica, vaya a /ejbca/publicweb/crls/search.cgi , tome nota del valor iHash apropiado y luego agregue una reescritura de URL de acuerdo con el siguiente ejemplo:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/configuration=filter/rewrite=cdp-RootCA:add(target="/ejbca/publicweb/crls/search.cgi?iHash=Aj2kgEB646IWuipyNwa970dIzOs")'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/host=default-host/filter-ref=cdp-RootCA:add(predicate="method(GET) and path(/crl/RootCA.crl)")'

Reescritura de URL para el servlet Certstore

Desde EJBCA 7.2, se ha eliminado la posibilidad de personalizar la URL del servlet Certstore en tiempo de compilación. Para más información, consulte ECA-7059 y las Notas de actualización a EJBCA 7.2 .

Sin embargo, se puede lograr el mismo resultado configurando Undertow. Por ejemplo, para permitir que un cliente descargue certificados de CA desde la URL /ejbca/certificates/ en lugar de /ejbca/publicweb/certificates/ , agregue la siguiente configuración:

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

O si desea vincular directamente a un certificado de CA específico, vaya a /ejbca/publicweb/certificates/search.cgi , tome nota del valor iHash apropiado y luego agregue una reescritura de URL de acuerdo con el siguiente ejemplo:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/configuration=filter/rewrite=aia-RootCA:add(target="/ejbca/publicweb/certificates/search.cgi?iHash=Aj2kgEB646IWuipyNwa970dIzOs")'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/host=default-host/filter-ref=aia-RootCA:add(predicate="method(GET) and path(/aia/RootCA.cer)")'

Reescritura de URL para el respondedor OCSP

Todas las respuestas OCSP se entregan desde la misma URL en EJBCA. Para acceder al respondedor OCSP en la dirección /ocsp, que es más concisa, en lugar de /ejbca/publicweb/status/ocsp , reconfigure Undertow de la siguiente manera:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/configuration=filter/rewrite=rewrite-ocsp:add(target="/ejbca/publicweb/status/ocsp")'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/host=default-host/filter-ref=rewrite-ocsp:add(predicate="path(/ocsp) and method(GET,POST)")'

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

Puede eliminar la fuente de datos ExampleDS, ya que no se utiliza. Esto no es necesario si se utilizó Galleon.

/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 no utilizados

Opcionalmente, elimine los subsistemas y extensiones no utilizados. Esto no es necesario si se utilizó Galleon.

Si utilizó el paquete zip de Jakarta EE Full & Web Distribution :

/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=microprofile-metrics-smallrye:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=microprofile-jwt-smallrye:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=ee-security: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 '/subsystem=distributable-web: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 '/subsystem=microprofile-config-smallrye:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=request-controller:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=security-manager:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/extension=org.wildfly.extension.microprofile.config-smallrye:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/extension=org.wildfly.extension.microprofile.metrics-smallrye:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/extension=org.wildfly.extension.microprofile.jwt-smallrye:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/extension=org.wildfly.extension.clustering.web: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 '/extension=org.wildfly.extension.request-controller:remove()'
/opt/wildfly/bin/jboss-cli.sh --connect '/extension=org.wildfly.extension.security.manager: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.

Eliminar AJP

Limpia toda la configuración relacionada con AJP si no lo estás utilizando.

/opt/wildfly/bin/jboss-cli.sh --connect '/socket-binding-group=standard-sockets/socket-binding=ajp: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)'
/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 un limitador de solicitudes

Puede limitar el número de conexiones simultáneas añadiendo un limitador de solicitudes en Undertow. Por ejemplo, para permitir que se procesen 100 conexiones simultáneamente y poner en cola hasta 300 antes de que se rechacen las nuevas:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/configuration=filter/request-limit=ejbca-request-limiter:add(max-concurrent-requests=100,queue-size=300)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/host=default-host/filter-ref=ejbca-request-limiter:add(predicate=path-prefix(/ejbca)'

Restringir el acceso a los servicios

Puede incluir direcciones IP en la lista blanca o bloquear el acceso a algunos servicios por completo usando predicados y controladores en Undertow.

Por ejemplo, para permitir el acceso a la web de CA solo desde el host local:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/configuration=filter/expression-filter=local-only:add(expression="ip-access-control(acl={127.0.0.0/8 allow})")'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/host=default-host/filter-ref=local-only:add(predicate="path-prefix(/ejbca/adminweb)")'

Para bloquear el acceso a las páginas web públicas y a la documentación de EJBCA:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/configuration=filter/expression-filter=not-found:add(expression="response-code(404)")'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/host=default-host/filter-ref=not-found:add(predicate="path-prefix(/ejbca/enrol,/ejbca/retrieve,/ejbca/inspect,/ejbca/doc) or path(/ejbca)")'

Agregar soporte para enviar correo electrónico

Para añadir compatibilidad con el envío de correo electrónico mediante un host inteligente SMTP, configure EjbcaMail . Especifique el nombre de host, la dirección, el puerto 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="465", host="my.mail.server")'
/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=mail/mail-session="java:/EjbcaMail":add(jndi-name=java:/EjbcaMail, from=noreply@ejbca.org)'
/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, podemos especificar que el directorio de implementación se escanee una vez al iniciar el servidor de aplicaciones estableciendo el intervalo de escaneo a 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 grandes, paquetes zip con perfiles, volcados de datos, etc. También puede ser necesario para publicar CRL relativamente grandes en un asistente virtual externo.

Si se utiliza una separación de 3 puertos, aumente el tamaño máximo de carga para el oyente HTTPS httpspriv .

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

Si se utiliza una separación de 2 puertos, aumente el tamaño máximo de carga para el escucha HTTPS https .

/opt/wildfly/bin/jboss-cli .sh --connect '/subsystem=undertow/server=default-server/https-listener=https: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)'

Eliminar el registro de auditoría de WildFly

Puede eliminar por completo la configuración de registro de auditoría de WildFly si no la está utilizando.

/opt/wildfly/bin/jboss-cli .sh --connect '/core-service=management/access=audit:remove()'

Configurar la inscripción de certificados con ACME

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

Para demostrar la propiedad del nombre de dominio en la CSR, WildFly debe poder enviar un desafío HTTP a través del puerto 80 del directorio raíz del servidor. La forma más sencilla de lograrlo es configurar WildFly con separación de dos puertos .

  1. Si el servidor ACME tiene un certificado de servidor que se encadena a una raíz interna en la que Java no confía, deberá agregarlo manualmente al almacén de confianza de Java.

    Agregar una CA al almacén de confianza de Java en CentOS/RHEL
    keytool -importcert -noprompt -trustcacerts -alias internal-root -file InternalRoot.pem -keystore /etc/pki/java/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=keystore/accounts.p12,relative-to=jboss.server.config.dir,credential-reference={store=defaultCS, alias=accountsPassword},type=PKCS12)'
  3. Define el directorio ACME que se usará. Si te inscribes directamente en un servidor EJBCA, usa algo como https://my.ca/ejbca/acme/<alias>/directory .

    /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/certificate-authority=AcmeCA:add(url="<ACME_DIRECTORY_URL>")'
  4. Registre una cuenta ACME con la CA. La CA podrá usar la dirección de correo electrónico para enviar anuncios y avisar sobre certificados próximos a vencer.

    /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/certificate-authority-account=AcmeAccount:add(certificate-authority=AcmeCA,alias=https,key-store=accountsKS,contact-urls=[mailto:admin@example.com])'
  5. Inscríbase para obtener un certificado y probar la configuración. Reemplace <HOSTNAME> por el nombre de host de su equipo. Puede especificar varios nombres de host separándolos con una coma.

    Inscríbase con un par de claves RSA
    /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/key-store=httpsKS:obtain-certificate(alias=https,domain-names=[<HOSTNAME1>],certificate-authority-account=AcmeAccount,agree-to-terms-of-service)'
    Inscribirse con un par de claves EC
    /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/key-store=httpsKS:obtain-certificate(alias=https,domain-names=[<HOSTNAME1>],algorithm=EC,key-size=256,certificate-authority-account=AcmeAccount,agree-to-terms-of-service)'
  6. Cree un script para renovar automáticamente el certificado cuando esté a punto de expirar.

    1. Instalar jq .

      Instalar jq en CentOS / RHEL
      yum install jq -y
    2. Cree el script llamado renew-wildfly-certificate.sh y colóquelo en /etc/cron.daily para que se ejecute diariamente. Ajuste los parámetros del script para que coincidan con su configuración.

      /etc/cron.daily/renew-wildfly-certificate.sh
      #!/bin/sh
      #
      # Renew the WildFly TLS server certificate using ACME.
      # Assumes an ACME account has been configured in Elytron.
      # Requires 'jq' to be installed.
      #
      # The number of days before expiry where renewal should be attempted.
      days=30
      # Specify the type of keypair to generate. Possible values: [ "secp256r1", "RSA2048" ]
      key_specification= "RSA2048"
      # The domain name(s) to put in the CSR. Separate with comma ','.
      domains= "domain1.com,domain2.com"
      # The keystore alias of the certificate to renew
      alias = "https"
      # The name of the ACME account in standalone.xml
      account= "AcmeAccount"
      output=$( /opt/wildfly/bin/jboss-cli .sh --connect "/subsystem=elytron/key-store=httpsKS:should-renew-certificate(alias=$alias,expiration=$days)" --output-json)
      logger "$output"
      renew=$( echo "$output" | jq '.result["should-renew-certificate"]' )
      if [ "$renew" = "true" ]; then
      logger "Attemping to renew domains [$domains]."
      if [ "$key_specification" = "secp256r1" ]; then
      output=$( /opt/wildfly/bin/jboss-cli .sh --connect "/subsystem=elytron/key-store=httpsKS:obtain-certificate(alias=$alias,domain-names=[$domains],algorithm=EC,key-size=256,certificate-authority-account=$account,agree-to-terms-of-service)" --output-json)
      logger "$output"
      fi
      if [ "$key_specification" = "RSA2048" ]; then
      output=$( /opt/wildfly/bin/jboss-cli .sh --connect "/subsystem=elytron/key-store=httpsKS:obtain-certificate(alias=$alias,domain-names=[$domains],certificate-authority-account=$account,agree-to-terms-of-service)" --output-json)
      logger "$output"
      fi
      fi
    3. Hacer que el script sea ejecutable.

      chmod +x /etc/cron.daily/renew-wildfly-certificate.sh

Iniciar WildFly al arrancar el sistema

Para que EJBCA esté disponible automáticamente después de reiniciar el sistema, utilice systemd.

systemctl enable wildfly

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 al menos 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.

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(name="Initial configuration")'
cp /opt/wildfly/standalone/configuration/standalone .xml /opt/wildfly/standalone/configuration/standalone .xml.backup

Crear un alias de terminal para leer el archivo de registro

EJBCA registra todas las acciones en el archivo de registro de WildFly, ubicado en /opt/wildfly/standalone/log/server.log . Suele ser útil poder filtrar e inspeccionar rápidamente las últimas líneas de registro. Si usa Fish, puede agregar la siguiente función a su archivo config.fish :

function wflog --description 'Tail and optionally filter the WildFly log file'
tail -f /opt/wildfly/standalone/log/server .log | \
awk ' /TRACE/ {print "\033[93m" $0 "\033[39m" }
/DEBUG/ {print "\033[0;32m" $0 "\033[39m" }
/INFO/ {print "\033[0;34m" $0 "\033[39m" }
/WARN/ {print "\033[0;33m" $0 "\033[39m" }
/ERROR/ {print "\033[0;31m" $0 "\033[39m" }
/SEVERE/ {print "\033[1;31m" $0 "\033[39m" }
!/(TRACE|DEBUG|INFO|WARN|ERROR|SEVERE)/ {print "\033[93m" $0 "\033[39m" }' | \
grep --line-buffered --color=never -E "$argv[1]"
end

O si estás usando Bash, agrega esto a tu .bashrc :

wflog() {
tail -f /opt/wildfly/standalone/log/server .log | \
awk ' /TRACE/ {print "\033[93m" $0 "\033[39m" }
/DEBUG/ {print "\033[0;32m" $0 "\033[39m" }
/INFO/ {print "\033[0;34m" $0 "\033[39m" }
/WARN/ {print "\033[0;33m" $0 "\033[39m" }
/ERROR/ {print "\033[0;31m" $0 "\033[39m" }
/SEVERE/ {print "\033[1;31m" $0 "\033[39m" }
!/(TRACE|DEBUG|INFO|WARN|ERROR|SEVERE)/ {print "\033[93m" $0 "\033[39m" }' | \
grep --line-buffered --color=never -E "$argv[1]"
}

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

SSL_CLIENT_CERT con proxy / Autenticación mutua

Se puede configurar la autenticación mutua reenviada/proxy a través de un dispositivo como un F5; sin embargo, el certificado debe estar en formato PEM e incluir el encabezado y el pie de página.

Próximo paso: Implementación de EJBCA

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

Depurar EJBCA

A continuación se explican las opciones de configuración en WildFly para solucionar problemas de EJBCA.

Cambiar al registro de depuración globalmente

Para habilitar el registro de depuración globalmente, si necesita solucionar problemas, siga estos pasos.

  1. Tome nota del nivel de registro actual de los paquetes org.cesecore y org.ejbca .

    /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore:read-attribute(name=level)'
    /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.ejbca:read-attribute(name=level)'
  2. Cambiar al registro de depuración.

    /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)'

Una vez que haya terminado de solucionar el problema, vuelva al nivel de registro que usó anteriormente. Tenga en cuenta que tener el registro de depuración habilitado globalmente generará muchos resultados; evite usar esta configuración en producción y considere habilitar la depuración para paquetes individuales.

Cambiar al registro de depuración para paquetes individuales

EJBCA se divide en diferentes paquetes, y en lugar de aumentar el nivel de registro globalmente, puede ser más preciso y seleccionar paquetes individuales para solucionar problemas. Para los paquetes y clases disponibles, puede generar dinámicamente una lista de comandos de la CLI de JBoss para habilitar el registro de depuración basándose en las declaraciones de importación y de paquetes en el código fuente, comenzando por los paquetes más populares:

grep -REh "^(package|import) (org.ejbca|org.cesecore|org.jitsi)" /opt/ejbca/modules | grep -v '*' | sed -E 's/(package|import) //' | sed -E 's/;\s*//' | awk '{n=split($0,c,".")};{for(i=1;i<=n;i++){for(j=1;j<=i;j++)printf("%s.",c[j]);printf("\n")}}' | sed -E 's/\.$//' | sort | uniq -c | sort -nr | awk '{if(NR>3) print "/opt/wildfly/bin/jboss-cli.sh --connect \'/subsystem=logging/logger="$2":add(level=DEBUG)\'"}'

Si buscas algo más llamativo, puedes canalizar la salida a algo como fzf , lo que te permite filtrar y seleccionar el nombre del paquete o la clase de una lista. Por ejemplo, añade lo siguiente a tu archivo config.fish :

function wflogging --description 'Configure EJBCA logging in WildFly using JBoss CLI and fuzzy finding'
grep -REh "^(package|import) (org.ejbca|org.cesecore|org.jitsi)" /opt/ejbca/modules | \
grep -v '*' | \
sed -E 's/(package|import) //' | \
sed -E 's/;\s*//' | \
awk '{n=split($0,c,".")};{for(i=1;i<=n;i++){for(j=1;j<=i;j++)printf("%s.",c[j]);printf("\n")}}' | \
sed -E 's/\.$//' | \
sort | uniq -c | sort -nr | \
awk '{if(NR>3) print $2}' | \
fzf --margin 1 % --border=rounded --header 'Package / Class' \
--bind "ctrl-a:execute-silent(/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger={}:add(level=INFO)')+refresh-preview" \
--bind "ctrl-r:execute-silent(/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger={}:remove')+refresh-preview" \
--bind "ctrl-t:execute-silent(/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger={}:write-attribute(name=level,value=TRACE)')+refresh-preview" \
--bind "ctrl-d:execute-silent(/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger={}:write-attribute(name=level,value=DEBUG)')+refresh-preview" \
--bind "ctrl-i:execute-silent(/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger={}:write-attribute(name=level,value=INFO)')+refresh-preview" \
--bind "ctrl-w:execute-silent(/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger={}:write-attribute(name=level,value=WARN)')+refresh-preview" \
--bind "ctrl-e:execute-silent(/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger={}:write-attribute(name=level,value=ERROR)')+refresh-preview" \
--bind "alt-t:execute-silent(/opt/wildfly/bin/jboss-cli.sh --connect ':take-snapshot(name=wflogging_)')" \
--bind "alt-r:execute(sudo mv /opt/wildfly/standalone/configuration/standalone.xml /opt/wildfly/standalone/configuration/standalone.xml.bak && sudo cp /opt/wildfly/standalone/configuration/standalone_xml_history/snapshot/wflogging_standalone.xml /opt/wildfly/standalone/configuration/standalone.xml && /opt/wildfly/bin/jboss-cli.sh --connect ':shutdown(restart=true)')" \
--preview "printf \"Current logging configuration for {}\n\n\" && /opt/wildfly/bin/jboss-cli.sh --output-json --connect '/subsystem=logging/logger={}:read-resource'"
end

O si estás usando Bash, agrega esto a tu .bashrc :

wflogging() {
grep -REh "^(package|import) (org.ejbca|org.cesecore|org.jitsi)" /opt/ejbca/modules | \
grep -v '*' | \
sed -E 's/(package|import) //' | \
sed -E 's/;\s*//' | \
awk '{n=split($0,c,".")};{for(i=1;i<=n;i++){for(j=1;j<=i;j++)printf("%s.",c[j]);printf("\n")}}' | \
sed -E 's/\.$//' | \
sort | uniq -c | sort -nr | \
awk '{if(NR>3) print $2}' | \
fzf --margin 1 % --border=rounded --header 'Package / Class' \
--bind "ctrl-a:execute-silent(/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger={}:add(level=INFO)')+refresh-preview" \
--bind "ctrl-r:execute-silent(/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger={}:remove')+refresh-preview" \
--bind "ctrl-t:execute-silent(/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger={}:write-attribute(name=level,value=TRACE)')+refresh-preview" \
--bind "ctrl-d:execute-silent(/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger={}:write-attribute(name=level,value=DEBUG)')+refresh-preview" \
--bind "ctrl-i:execute-silent(/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger={}:write-attribute(name=level,value=INFO)')+refresh-preview" \
--bind "ctrl-w:execute-silent(/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger={}:write-attribute(name=level,value=WARN)')+refresh-preview" \
--bind "ctrl-e:execute-silent(/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger={}:write-attribute(name=level,value=ERROR)')+refresh-preview" \
--bind "alt-t:execute-silent(/opt/wildfly/bin/jboss-cli.sh --connect ':take-snapshot(name=wflogging_)')" \
--bind "alt-r:execute(sudo mv /opt/wildfly/standalone/configuration/standalone.xml /opt/wildfly/standalone/configuration/standalone.xml.bak && sudo cp /opt/wildfly/standalone/configuration/standalone_xml_history/snapshot/wflogging_standalone.xml /opt/wildfly/standalone/configuration/standalone.xml && /opt/wildfly/bin/jboss-cli.sh --connect ':shutdown(restart=true)')" \
--preview "printf \"Current logging configuration for {}\n\n\" && /opt/wildfly/bin/jboss-cli.sh --output-json --connect '/subsystem=logging/logger={}:read-resource'"
}


Esto agregará un comando llamado wflogging, que abre fzf, donde puede seleccionar una clase o un paquete de una lista. Presione Alt+T para tomar una instantánea de la configuración de registro existente, Ctrl+A para agregar el registro, Ctrl+R para eliminarlo y Ctrl+D para habilitar la depuración del elemento seleccionado. La configuración actual del servidor de aplicaciones se muestra en la ventana de vista previa a la derecha.

Solicitudes y respuestas de registro para la API de servicio web

Para registrar los mensajes SOAP recibidos y enviados desde EJBCA:

/opt/wildfly/bin/jboss-cli.sh --connect '/system-property=org.apache.cxf.logging.enabled:add(value=true)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.apache.cxf.services:add(level=INFO)'
systemctl restart wildfly

Para eliminar la configuración cuando haya terminado:

/opt/wildfly/bin/jboss-cli.sh --connect '/system-property=org.apache.cxf.logging.enabled:remove'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.apache.cxf.services:remove'
systemctl restart wildfly

Solicitudes y respuestas de registro para la API REST de EJBCA

Hay un filtro de servlet incluido con la API REST EJBCA que se puede usar para volcar la solicitud y la respuesta completas.

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.ejbca.ui.web.rest.api.config.RestLoggingFilter:add(level=TRACE)'

Solicitudes de registro y respuestas para EST

Hay un filtro de servlet incluido con la API REST EJBCA que se puede usar para volcar la solicitud y la respuesta completas.

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.ejbca.ui.web.protocol.EstLoggingFilter:add(level=TRACE)'

Solicitudes de registro para CMP

CmpMessageDispatcherSessionBean registra cualquier mensaje CMP enviado desde el cliente CMP en el nivel de depuración. El ASN.1 completo se registra en el nivel de seguimiento.

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.ejbca.core.protocol.cmp.CmpMessageDispatcherSessionBean:add(level=TRACE)'

Solicitudes y respuestas de registro para la API de ACME

Hay un filtro de servlet incluido con la implementación EJBCA ACME que se puede usar para volcar la solicitud y la respuesta completas.

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.ejbca.ui.web.protocol.acme.web.AcmeLoggingFilter:add(level=DEBUG)'

Habilitar la depuración para la inscripción automática de Microsoft

Para solucionar problemas de inscripción automática de Microsoft, habilite la depuración para el paquete MSAE.

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

Supervisar el grupo de conexiones de sistemas pares

Cada conector de pares mantiene un conjunto de conexiones TLS. Cada solicitud ocupará una conexión del conjunto, y las solicitudes se retrasan si el conjunto está vacío. Si sospecha que se necesitan más conexiones agrupadas:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.ejbca.peerconnector.ra.PeerRaThrottleCounter:add(level=DEBUG)'

Integración de depuración con módulos de seguridad de hardware

P11Ng es el componente de EJBCA responsable de la comunicación con el HSM mediante PKCS#11. Si necesita solucionar problemas relacionados con el HSM, puede habilitar la depuración de P11Ng de la siguiente manera:

Las instalaciones más antiguas pueden utilizar Sun PKCS#11 en lugar de P11Ng, en cuyo caso estas instrucciones no se aplican.

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.keys.token.p11ng:add(level=DEBUG)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.ejbca.ui.p11ngcli:add(level=DEBUG)'
# Optionally add this logging item for troubleshooting PKCS# 11 in-depth PKCS#
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.keys.token.p11ng.provider.CryptokiDevice:add(level=TRACE)'

Habilitar estadísticas de hibernación

Hibernate es la biblioteca ORM que EJBCA utiliza para crear consultas SQL. Puede habilitar las estadísticas de Hibernate para obtener la consulta SQL, así como el tiempo de ejecución, escritos en el registro del servidor.

Las estadísticas de Hibernate son bastante detalladas y puede haber herramientas específicas de la base de datos más adecuadas para solucionar problemas de rendimiento de la base de datos; sin embargo, si desea habilitarla:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=datasources/data-source=ejbcads/statistics=pool:write-attribute(name=statistics-enabled,value=true)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=datasources/data-source=ejbcads/statistics=jdbc:write-attribute(name=statistics-enabled,value=true)'
/opt/wildfly/bin/jboss-cli.sh --connect '/system-property=hibernate.generate_statistics:add(value=true)'
/opt/wildfly/bin/jboss-cli.sh --connect '/system-property=hibernate.show_sql:add(value=true)'
/opt/wildfly/bin/jboss-cli.sh --connect '/system-property=hibernate.format_sql:add(value=true)'
/opt/wildfly/bin/jboss-cli.sh --connect '/system-property=hibernate.use_sql_comments:add(value=true)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.hibernate.stat:add(level=DEBUG)'
systemctl restart wildfly

Para eliminar la configuración:

/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.hibernate.stat:remove'
/opt/wildfly/bin/jboss-cli.sh --connect '/system-property=hibernate.use_sql_comments:remove'
/opt/wildfly/bin/jboss-cli.sh --connect '/system-property=hibernate.format_sql:remove'
/opt/wildfly/bin/jboss-cli.sh --connect '/system-property=hibernate.show_sql:remove'
/opt/wildfly/bin/jboss-cli.sh --connect '/system-property=hibernate.generate_statistics:remove'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=datasources/data-source=ejbcads/statistics=jdbc:write-attribute(name=statistics-enabled,value=false)'
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=datasources/data-source=ejbcads/statistics=pool:write-attribute(name=statistics-enabled,value=false)'
systemctl restart wildfly

Habilitar la creación de perfiles mediante Glowroot

  1. Descargue Glowroot y colóquelo en su directorio WildFly.

    wget https: //github.com/glowroot/glowroot/releases/download/v0.13.6/glowroot-0.13.6-dist.zip -O /tmp/glowroot.zip
    unzip -q /tmp/glowroot.zip -d /opt/wildfly
    chown -R wildfly:wildfly /opt/wildfly/glowroot


  2. Registre Glowroot como agente Java y reinicie WildFly.

    sed -i '/-Djdk.tls.ephemeralDHKeySize=2048/ a \ \ \ JAVA_OPTS=\"$JAVA_OPTS -javaagent:/opt/wildfly/glowroot/glowroot.jar"' /opt/wildfly/bin/standalone.conf
    systemctl restart wildfly
  3. Glowroot ahora debería estar disponible en http://localhost:4000 .

Servicios de EJBCA

Este apéndice enumera los servicios expuestos por EJBCA. Esto puede ser útil al configurar los controladores de Undertow o si se dispone de un firewall de capa de aplicación frente a WildFly.

Servicio

Protocolo

URL

Comentario

Sitio web de EJBCA CA

HTTPS

http[s]://{nombre de host}/ejbca/adminweb


Sitio web de EJBCA RA

HTTPS

http[s]://{nombre de host}/ejbca/ra


Páginas web públicas de EJBCA

HTTP, HTTPS

http[s]://{nombre de host}/ejbca
http[s]://{nombre de host}/ejbca/enrol
http[s]://{nombre de host}/ejbca/retrieve
http[s]://{nombre de host}/ejbca/inspect


Interfaz de usuario Swagger

HTTPS

https://{{nombre de host}}/ejbca/swagger-ui

Solo modo de no producción

Documentación de EJBCA

HTTP, HTTPS

http[s]://{nombre de host}/ejbca/doc


Distribución de CRL de EJBCA

HTTP, HTTPS

http[s]://{nombre de host}/ejbca/publicweb/webdist/certdist?cmd=[crl|deltacrl]&issuer={subjectDn}


Distribución de certificados CA de EJBCA

HTTP, HTTPS

http[s]://{nombre de host}/ejbca/publicweb/certificates/search.cgi


Comprobación del estado de EJBCA

HTTP, HTTPS

http://{nombre de host}/ejbca/publicweb/healthcheck/ejbcahealth
http://{nombre de host}/ejbca/publicweb/healthcheck/vastatus


API de servicio web EJBCA

HTTPS

https://{nombre de host}/ejbca/ejbcaws/ejbcaws?wsdl


Inscripción automática de Microsoft

HTTPS

https://{nombre de host}/ejbca/msae/CEPService?{alias}


Respondedor OCSP de EJBCA

HTTP, HTTPS

http[s]://{nombre de host}/ejbca/publicweb/status/ocsp


SCEP de la EJBCA

HTTP, HTTPS

http[s]://{nombre de host}/ejbca/publicweb/apply/scep/[{alias}/]pkiclient.exe


CMP de la EJBCA

HTTP, HTTPS

http[s]://{nombre de host}/ejbca/publicweb/cmp[/{alias}]


EJBCA ACME

HTTP, HTTPS

http[s]://{nombre de host] /ejbca/acme/[{alias}/]


EJBCA EST

HTTPS

https://{nombre de host}/ejbca/.well-known/est/[{alias}/]


API REST de EJBCA

HTTP, HTTPS

http[s]://{nombre de host} /ejbca/ejbca-rest-api


Sistemas de pares

HTTPS

https://{nombre de host}/ejbca/peer/v1