WildFly 22 / JBoss EAP 7.4
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 según sus necesidades. 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:
wget https: //download .jboss.org /wildfly/22 .0.0.Final /wildfly-22 .0.0.Final.zip -O /tmp/wildfly-22 .0.0.Final.zipunzip -q /tmp/wildfly-22 .0.0.Final.zip -d /opt/ln -snf /opt/wildfly-22 .0.0.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.
wget https: //github /wildfly/galleon/releases/download/galleon-parent-4 .2.6.Final .com /galleon-4 .2.6.Final.zip -O /tmp/galleon-4 .2.6.Final.zipunzip -q /tmp/galleon-4 .2.6.Final.zip -d /tmp/cd /tmp/galleon-4 .2.6.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 |
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) |
ejb | Soporte para Jakarta Enterprise Beans, excluyendo el protocolo IIOP. | ejb-lite |
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). | validación de bean (opcional) |
jsf | Soporte para Jakarta Server Faces. | validación de bean (opcional) |
explotación florestal | Soporte para el subsistema de registro. | servidor base |
correo | Soporte para Jakarta Mail. | servidor base |
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) |
seguridad heredada | Compatibilidad con seguridad web heredada basada en Picketbox. | nombrando |
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:
. /galleon .sh install wildfly:current #22.0.0.Final --dir=/opt/wildfly-22.0.0.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-securityln -snf /opt/wildfly-22 .0.0.Final /opt/wildfly Al compilar EJBCA desde el código fuente, es necesario 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 22 con Galleon, pero puede obtenerlo manualmente del repositorio central de Maven.
mkdir /opt/wildfly/bin/clientwget https: //repo1.maven.org/maven2/org/wildfly/wildfly-client-all/22.0.0.Final/wildfly-client-all-22.0.0.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.xmlrm -rf /opt/wildfly/modules/system/layers/base/org/jboss/resteasy/resteasy-crypto/ Crear una configuración personalizada
Reemplace /opt/wildfly/bin/standalone.conf con el siguiente archivo de configuración.
if [ "x$JBOSS_MODULES_SYSTEM_PKGS" = "x" ]; thenJBOSS_MODULES_SYSTEM_PKGS= "org.jboss.byteman"fiif [ "x$JAVA_OPTS" = "x" ]; thenJAVA_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 valor único. El subsistema de transacciones utiliza este ID para garantizar que el gestor de transacciones solo recupere ramas que coincidan con el identificador especificado. Este identificador debe ser único entre las instancias de WildFly que comparten un almacén de objetos o acceden a gestores de recursos comunes (es decir, cuando EJBCA opera en un clúster).
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/bincp /opt/wildfly/docs/contrib/scripts/systemd/wildfly / .service /etc/systemd/systemmkdir /etc/wildflycp /opt/wildfly/docs/contrib/scripts/systemd/wildfly /etc/wildfly .confsystemctl daemon-reloaduseradd -r -s /bin/false wildflychown -R wildfly:wildfly /opt/wildfly-22 .0.0.Final/El directorio docs no existe al usar Galleon. Como referencia, así se ven los archivos faltantes:
#!/bin/bashif [ "x$WILDFLY_HOME" = "x" ]; thenWILDFLY_HOME= "/opt/wildfly"fiif [[ "$1" == "domain" ]]; then$WILDFLY_HOME /bin/domain .sh -c $2 -b $3else$WILDFLY_HOME /bin/standalone .sh -c $2 -b $3fi [Unit]Description=The WildFly Application ServerAfter=syslog.target network.targetBefore=httpd.service[Service]Environment=LAUNCH_JBOSS_IN_BACKGROUND=1EnvironmentFile=- /etc/wildfly/wildfly .confUser=wildflyLimitNOFILE=102642PIDFile= /var/run/wildfly/wildfly .pidExecStart= /opt/wildfly/bin/launch .sh $WILDFLY_MODE $WILDFLY_CONFIG $WILDFLY_BINDStandardOutput=null[Install]WantedBy=multi-user.target # The configuration you want to runWILDFLY_CONFIG=standalone.xml# The mode you want to runWILDFLY_MODE=standalone# The address to bind toWILDFLY_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_passecho "echo '$(openssl rand -base64 24)'" >> /usr/bin/wildfly_passchown wildfly:wildfly /usr/bin/wildfly_passchmod 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/keystorechown 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
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
wget https: .3.1.jar -O .jar //jdbc .postgresql.org /opt/wildfly/standalone/deployments/postgresql-jdbc4 /download/postgresql-42 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' 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' 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.
# 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 .logkdc = FILE: /var/log/krb5kdc .logadmin_server = FILE: /var/log/kadmind .log[libdefaults]dns_lookup_realm = truedns_lookup_kdc = trueticket_lifetime = 24hrenew_lifetime = 7dforwardable = truerdns = falsespake_preauth_groups = edwards25519default_realm = YOUR.DOMAINdefault_tkt_enctypes = aes256-cts aes256-cts-hmac-sha1-96 aes128-ctsdefault_tgs_enctypes = aes256-cts aes256-cts-hmac-sha1-96 aes128-ctspermitted_enctypes = aes256-cts aes256-cts-hmac-sha1-96 aes128-cts[realms]YOUR.DOMAIN = {kdc = foobar.YOUR.DOMAINdefault_domain = foobar.YOUR.DOMAINadmin_server = foobar.YOUR.DOMAIN}[domain_realm].your.domain = YOUR.DOMAINyour.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' 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' 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)' 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:
/subsystem=undertow/server= default -server/host= default -host/setting=access-log:add(pattern= "%h %t \"%r\" %s \"%{i,User-Agent}\"" , use-server-log= true )/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:
#!/bin/sh# Remove log files older than 7 daysfind /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 aparte. Por ejemplo, para registrarlo en /opt/wildfly/standalone/log/cesecore-audit.log , rotarlo cada 500 MB y conservar los dos últimos archivos rotados:
/subsystem=logging/size-rotating-file-handler=cesecore-audit-log:add(file={path=cesecore-audit.log, relative-to=jboss.server.log.dir}, max-backup-index= 2 , rotate-size=500m)/subsystem=logging/logger=org.cesecore.audit.impl.log4j.Log4jDevice:add/subsystem=logging/logger=org.cesecore.audit.impl.log4j.Log4jDevice:add-handler(name=cesecore-audit-log) 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 '/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 '/subsystem=undertow/server=default-server/https-listener=https:remove()'/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' 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.
/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' 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.
systemctl enable firewalld --nowfirewall-cmd --set- default -zone=dmzfirewall-cmd --zone=dmz --permanent --add-port 8080 /tcpfirewall-cmd --zone=dmz --permanent --add-port 8442 /tcpfirewall-cmd --zone=dmz --permanent --add-port 8443 /tcpfirewall-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' 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.
systemctl enable firewalld --nowfirewall-cmd --set- default -zone=dmzfirewall-cmd --zone=dmz --permanent --add-port 8080 /tcpfirewall-cmd --zone=dmz --permanent --add-port 8443 /tcpfirewall-cmd --reloadAlternativamente, puede abrir el puerto 80 y el puerto 443 y redirigir el tráfico a 8080 y 8443 respectivamente.
systemctl enable firewalld --nowfirewall-cmd --set- default -zone=dmzfirewall-cmd --zone=dmz --permanent --add-port 80 /tcpfirewall-cmd --zone=dmz --permanent --add-port 443 /tcpfirewall-cmd --permanent --add-forward-port=port= 80 :proto=tcp:toport= 8080firewall-cmd --permanent --add-forward-port=port= 443 :proto=tcp:toport= 8443firewall-cmd --reload 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' 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 de servicios opcionales
Las siguientes secciones cubren configuraciones opcionales de las funciones de WildFly .
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' Eliminar AJP
Limpie todas las configuraciones relacionadas con AJP que no esté utilizando o las configuraciones que ya estaban configuradas cuando intentó agregarlas.
/opt/wildfly/bin/jboss-cli.sh --connect '/socket-binding-group=standard-sockets/socket-binding=ajp:remove()'/opt/wildfly/bin/jboss-cli.sh --connect ':reload' 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' 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 la inscripción del certificado TLS con ACME
El subsistema Elytron de WildFly puede inscribirse para certificados de servidor TLS (configurados manualmente en keystore.jks) mediante ACME. Si se inscribe desde EJBCA, consulte ACME para obtener más información sobre 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 .
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/RHELkeytool -importcert -noprompt -trustcacerts -alias internal-root -file InternalRoot.pem -keystore /etc/pki/java/cacerts -storepass changeitCree 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)'Define el directorio ACME que se usará. Si te inscribes directamente en un servidor EJBCA, usa algo como https://my.ca/ejbca/acme//directory .
/opt/wildfly/bin/jboss-cli.sh --connect'/subsystem=elytron/certificate-authority=AcmeCA:add(url="<ACME_DIRECTORY_URL>")'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])'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)'Cree un script para renovar automáticamente el certificado cuando esté a punto de expirar.
Instalar jq .
Instalar jq en CentOS / RHELyum install jq -yCree 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 renewalias="https"# The name of the ACME account in standalone.xmlaccount="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"];thenlogger"Attemping to renew domains [$domains]."if["$key_specification"="secp256r1"];thenoutput=$(/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"fiif["$key_specification"="RSA2048"];thenoutput=$(/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"fifiHacer que el script sea ejecutable.
chmod +x /etc/cron.daily/renew-wildfly-certificate.sh
Configuración de ajuste opcional
Las siguientes secciones cubren configuraciones opcionales de WildFly relacionadas con la integración con otros sistemas .
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)' 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 estado, etc. También puede ser necesario aumentar el tamaño máximo de carga para publicar CRL relativamente grandes en un agente 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' 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)")' 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:
#!/bin/sh# Compress the OCSP audit log and the OCSP transaction log after rotationxz /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 Endurecimiento opcional de WildFly
Las siguientes secciones cubren configuraciones opcionales relacionadas con el fortalecimiento de la seguridad o la eliminación de funciones no utilizadas en WildFly .
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' 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/ 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()'# This line is not needed if Galleon was used/opt/wildfly/bin/jboss-cli.sh --connect 'data-source remove --name=ExampleDS'/opt/wildfly/bin/jboss-cli.sh --connect ':reload' 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.
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'Si usaste Galleon:
/opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=security/security-domain=jaspitest:remove()'/opt/wildfly/bin/jboss-cli.sh --connect ':reload' 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' Espere a que se complete la recarga verificando el registro del servidor o el resultado de :read-attribute(name=server-state) antes de continuar.
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)' 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' 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)")' 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 está sirviendo recursos en el dominio mediante HTTP, como respuestas OCSP, puede habilitar esta opción para mejorar la seguridad. Comience 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)")' 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' 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 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()' Iniciar WildFly al arrancar el sistema
Para que EJBCA esté disponible automáticamente después de reiniciar el sistema (opcional, no obligatorio), 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' 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]"endO 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 Referencias
A continuación se enumeran enlaces a referencias y recursos externos útiles.
Documentación de WildFly - Guía de aprovisionamiento de galeones
Documentación web para desarrolladores de Mozilla, Seguridad de transporte estricta
Documentación de Undertow 2.0, predicados, atributos y controladores
GitHub - Wiki de Glowroot, Instalación del agente (con recopilador integrado)
GitHub Gist: Configuración de un registro de acceso con WildFly
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.
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)'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 habilitar el registro de depuración 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 logging for various packages and classes in WildFly using 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'"endO 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 wildflyPara 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 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)' 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)' 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 wildflyPara 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
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.zipunzip -q /tmp/glowroot.zip -d /opt/wildflychown -R wildfly:wildfly /opt/wildfly/glowrootRegistre 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.confsystemctl restart wildflyGlowroot ahora debería estar disponible en http://localhost:4000 .
Servicios de EJBCA
A continuación, se enumeran los servicios expuestos por EJBCA. Esto puede ser útil al configurar 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 | |
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 | |
API de servicio web EJBCA | HTTPS | https://{nombre de host}/ejbca/ejbcaws/ejbcaws?wsdl | |
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 |