WildFly 12 / JBoss EAP 7.1

En WildFly, la implementación y la instalación no configuran automáticamente el servidor de aplicaciones. Configure el servidor de aplicaciones según las instrucciones de las siguientes secciones.

Para las partes específicas de Oracle en esta guía, asumimos que ha instalado Oracle XE versión 11g release 2 (se puede descargar desde Oracle Database ) en su máquina y la ha configurado para escuchar en el puerto 1521.

Se desaconseja encarecidamente ejecutar la aplicación con un usuario root debido al riesgo de escalada de privilegios. Ejecutar la instalación como root puede provocar que se otorguen privilegios root a archivos que WildFly no podrá leer posteriormente. En su lugar, se recomienda ejecutar la instalación con el mismo usuario que ejecuta el servidor de aplicaciones.


Agregar controlador de base de datos

Agregue el controlador de base de datos MariaDB implementándolo en caliente en el directorio de implementación. WildFly lo detectará 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 "driver-name" genérico para el comando de la fuente de datos.

$ cp mariadb .jar mariadb-java-client-2.2.3.jar wildfly_home /standalone/deployments/mariadb-java-client

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

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

Aumentar el uso de memoria permitido

De forma predeterminada, solo se permiten 512 MB de memoria dinámica. Edite wildfly_home/bin/standalone.conf para aumentar este valor a un valor más adecuado, por ejemplo:

JAVA_OPTS= "-Xms2048m -Xmx2048m -XX:MetaspaceSize=192M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true"

Agregar fuente de datos

Para agregar una fuente de datos para que la use EJBCA, inicie JBoss (con bin/standalone.sh ) y ejecute los comandos en JBoss CLI según los ejemplos a continuación.

MariaDB/MySQL

Para MariaDB/MySQL, ejecute lo siguiente:

> wildfly_home/bin/jboss-cli.sh -c
> data-source add --name=ejbcads --driver-name="mariadb-java-client.jar" --connection-url="jdbc: mysql://127.0.0.1:3306/ejbca " --jndi-name="java:/EjbcaDS" --use-ccm=true --driver-class="org.mariadb.jdbc.Driver" --user-name="ejbca" --password="ejbca" --validate-on-match=true --background-validation=false --prepared-statements-cache-size=50 --share-prepared-statements=true --min-pool-size=5 --max-pool-size=150 --pool-prefill=true --transaction-isolation=TRANSACTION_READ_COMMITTED --check-valid-connection-sql="select 1;"
> :reload

Si está utilizando otro tipo de base de datos, adapte la declaración anterior con el nombre del controlador, la URL de conexión, la clase del controlador y la conexión SQL válida.

Oracle XE versión 11g Release 2

Para Oracle XE, ejecute lo siguiente:

> wildfly_home/bin/jboss-cli.sh -c
> data-source add --name=ejbcads --driver-name= "ojdbc8.jar" --connection-url= "jdbc:oracle:thin:@127.0.0.1:1521:XE" --jndi-name= "java:/EjbcaDS" --use-ccm= true --driver- class = "oracle.jdbc.driver.OracleDriver" --user-name= "ejbca" --password= "ejbca" --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 from dual"
> :reload

Configurar WildFly Remoting

EJBCA necesita usar JBoss Remoting para que la CLI de EJBCA funcione. Lo configuramos para usar un puerto 4447 independiente y eliminamos cualquier otra dependencia de la comunicación remota, excepto la que EJBCA necesita.

$ wildfly-12.0.0.Final /bin/jboss-cli .sh --connect
/subsystem =remoting /http-connector =http-remoting-connector:write-attribute(name=connector-ref,value=remoting)
/socket-binding-group =standard-sockets /socket-binding =remoting:add(port=4447,interface=management)
/subsystem =undertow /server =default-server /http-listener =remoting:add(socket-binding=remoting, enable -http2= true )
/subsystem =infinispan /cache-container =ejb:remove()
/subsystem =infinispan /cache-container =server:remove()
/subsystem =infinispan /cache-container =web:remove()
/subsystem =ejb3 /cache =distributable:remove()
/subsystem =ejb3 /passivation-store =infinispan:remove()
:reload()

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

Configurar el registro

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

/subsystem =logging /logger =org.ejbca:add(level=INFO)
/subsystem =logging /logger =org.cesecore:add(level=INFO)

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

/subsystem =org.ejbca:write-attribute(name=level, value=DEBUG) /logger =logging
/subsystem =org.cesecore:write-attribute(name=level, value=DEBUG) /logger =logging

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

A continuación se describe la configuración del escucha HTTP(S) con separación de 3 puertos.

Eliminar la configuración TLS y HTTP existente

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

/subsystem=undertow/server= default -server/http-listener= default :remove()
/subsystem=undertow/server= default -server/https-listener=https:remove()
/socket-binding-group=standard-sockets/socket-binding=http:remove()
/socket-binding-group=standard-sockets/socket-binding=https:remove()
:reload()

Espere a que se complete la recarga verificando el registro del servidor o el resultado de :read-attribute(name=server-state) antes de continuar.

Agregar nuevas interfaces y sockets

Para agregar nuevas interfaces y sockets:

/interface =http:add(inet-address= "0.0.0.0" )
/interface =httpspub:add(inet-address= "0.0.0.0" )
/interface =httpspriv:add(inet-address= "0.0.0.0" )
/socket-binding-group =standard-sockets /socket-binding =http:add(port= "8080" ,interface= "http" )
/socket-binding-group =standard-sockets /socket-binding =httpspub:add(port= "8442" ,interface= "httpspub" )
/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 de esta sección sean correctas para que los comandos no fallen. En producción, las contraseñas deben cambiarse a contraseñas "reales".

Actualice el alias del almacén de claves para que coincida con httpsserver.hostname en web.properties. Además, actualice la contraseña del almacén de claves de keystore.jks para que coincida con httpsserver.password y la contraseña del almacén de claves de truststore.jks para que coincida con java.truststore en web.properties.

/subsystem =elytron /key-store =httpsKS:add(path= "keystore/keystore.jks" ,relative-to=jboss.server.config. dir ,credential-reference={ -text= clear = "serverpwd" }, type =JKS)
/subsystem =elytron /key-store =httpsTS:add(path= "keystore/truststore.jks" ,relative-to=jboss.server.config. dir ,credential-reference={ -text= clear = "changeit" }, type =JKS)
/subsystem =elytron /key-manager =httpsKM:add(key-store=httpsKS,algorithm= "SunX509" ,credential-reference={ clear -text= "serverpwd" })
/subsystem =elytron /trust-manager =httpsTM:add(key-store=httpsTS)
/subsystem =elytron /server-ssl-context =httpspub:add(key-manager=httpsKM,protocols=[ "TLSv1.2" ])
/subsystem =elytron /server-ssl-context =httpspriv:add(key-manager=httpsKM,protocols=[ "TLSv1.2" ],trust-manager=httpsTM,need-client-auth= true ,authentication-optional= false ,want-client-auth= true

Opcionalmente, el contexto "httpspriv" se puede configurar con autenticación de certificado de cliente opcional utilizando "need-client-auth=false,authentication-optional=true" en su lugar.

Agregar oyentes HTTP(S)

Para agregar oyentes HTTP(S):

/subsystem =undertow /server =default-server /http-listener =http:add(socket-binding= "http" , redirect-socket= "httpspriv" )
/subsystem =undertow /server =default-server /https-listener =httpspub:add(socket-binding= "httpspub" , ssl-context= "httpspub" , max-parameters=2048)
/subsystem =undertow /server =default-server /https-listener =httpspriv:add(socket-binding= "httpspriv" , ssl-context= "httpspriv" , max-parameters=2048)
:reload()

Configuración del comportamiento del protocolo HTTP

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

/system-property =org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH:add(value= true )
/system-property =org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH:add(value= true )
/system-property =org.apache.catalina.connector.URI_ENCODING:add(value= "UTF-8" )
/system-property =org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING:add(value= true )
/subsystem =webservices:write-attribute(name=wsdl-host, value=jbossws.undefined.host)
/subsystem =webservices:write-attribute(name=modify-wsdl-address, value= true )
:reload()


Si está utilizando solicitudes GET de OCSP, es necesario configurar la codificación de URI y permitir la codificación para la consulta y la barra invertida mencionadas anteriormente.

Esto también garantizará que la dirección en el WSDL EJBCA WS coincida con el nombre de host y el puerto que el cliente utilizó para acceder al servidor.

Configuraciones opcionales

Eliminar el contenido de bienvenida y el encabezado x-powered-by

/subsystem =undertow /server =default-server /host =default-host /location = "\/" :remove()
/subsystem =undertow /server =default-server /host =default-host /filter-ref =server-header:remove()
/subsystem =undertow /server =default-server /host =default-host /filter-ref =x-powered-by-header:remove()
/subsystem =undertow /configuration =handler /file =welcome-content:remove()
/subsystem =undertow /configuration =filter /response-header =server-header:remove()
/subsystem =undertow /configuration =filter /response-header =x-powered-by-header:remove()
:reload()

Redirigir a la aplicación para URL desconocidas

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

/subsystem =undertow /configuration =filter /rewrite =redirect-to-app:add(redirect= true ,target= "/ejbca/" )
/subsystem =undertow /server =default-server /host =default-host /filter-ref =redirect-to-app:add(predicate= "method(GET) and not path-prefix(/ejbca/,'/crls','/certificates',/.well-known/)" )
:reload()

Eliminar la fuente de datos ExampleDS

Para eliminar opcionalmente la fuente de datos ExampleDS:

/subsystem=ee/service= default -bindings:remove()
data-source remove --name=ExampleDS
:reload()

Habilitar el conector AJP

Solo es necesario habilitar el conector AJP si ejecuta un front-end Apache delante de WildFly:

/subsystem =undertow /server =default-server /ajp-listener =ajp-listener:add(socket-binding=ajp, scheme=https, enabled= true )

Opcional: agregar compatibilidad con PKCS#11 (HSM)

WildFly aísla la mayoría de las clases sun por defecto. A partir de EJBCA 6.6.3, EJBCA configura JBoss/WildFly para exponer estas clases (sun/security/pkcs11/wrapper) mediante jboss-deployment-structure.xml . Esto elimina la necesidad de configurar modules/system/layers/base/sun/jdk/main/module.xml .

Opcional: Agregar soporte para enviar correo electrónico

Para agregar soporte para enviar correo electrónico (smtp), configure EjbcaMail con:

/socket-binding-group =standard-sockets /remote-destination-outbound-socket-binding =ejbca-mail-smtp:add(port= "993" , host= "my.mail.server" )
/subsystem =mail /mail-session = "java:/EjbcaMail" :add(jndi-name=java: /EjbcaMail , from=noreply@mymail)
/subsystem =mail /mail-session = "java:/EjbcaMail" /server =smtp:add(outbound-socket-binding-ref=ejbca-mail-smtp, tls= true , username=smtpuser, password=smtppassword)

Próximo paso: Implementación de EJBCA

Implementación de EJBCA