Habilitar soporte SSL en WildFly AS 8

wildfly-logo

WildFly Application Server es el heredero del ya conocido JBoss AS Community, que entre otras cosas ha aprovechado el vació que dejó Glassfish luego de quedarse sin soporte comercial, siendo actualmente el #1 en servidores de aplicaciones Java.

Creando el certificado

Actualmente WildFly ofrece tres opciones para dar soporte a cifrado SSL, siendo estas:

  1. Certificados auto-firmados dentro de un Java Key Store (JKS).
  2. Un certificado auto-firmado común (OpenSSL, CAcert).
  3. Un certificado SSL firmado por una autoridad de emisión de certificados (certificados SSL reales).

Para propósitos de desarrollo suele ser conveniente alguna de las primeras dos opciones. Siendo así el primer paso es crear un Java Key Store utilizando keytool que esta incluido en los JDK. Es también recomendable (pero no obligatorio)  crearlo dentro del directorio de configuración de JBoss ($JBOSS_HOME/standalone/configuration):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ keytool -genkey -alias demo -keyalg RSA -sigalg MD5withRSA -keystore my.jks -storepass mypass -keypass mypass -validity 9999
 
What is your first and last name?
[Unknown]:  localhost
What is the name of your organizational unit?
[Unknown]:  nab
What is the name of your organization?
[Unknown]:  nab
What is the name of your City or Locality?
[Unknown]:  Guatemala
What is the name of your State or Province?
[Unknown]:  Guatemala
What is the two-letter country code for this unit?
[Unknown]:  GT
Is CN=localhost, OU=nabenik, O=nabenik, L=Guatemala, ST=Guatemala, C=GT correct?
[no]yes

Es importante conservar localhost en el campo «first and last name», de otra forma suelen darse inconvenientes con algunos navegadores web.

Creando un área de seguridad

Luego de crear el certificado es necesario crear un área de seguridad para Undertow (el servidor Web incluido en WildFly). Para esto, hay que localizar el archivo de configuración de WildFly ($JBOSS_HOME/standalone/configuration/standalone.xml), y agregar la siguiente configuración:

1
2
3
4
5
6
7
<security-realm name="UndertowRealm">
    <server-identities>
        <ssl>
            <keystore path="my.jks" relative-to="jboss.server.config.dir" keystore-password="mypass" alias="demo" key-password="mypass"/>
        </ssl>
    </server-identities>
</security-realm>

En el ejemplo la ruta del keystore es relativa a jboss.server.config.dir, debe notarse que keystore-password, key-password, y alias deben coincidir con la información usada al momento de usar el certificado. Luego de agregar la información, la sección security-realms debe verse así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<security-realms>
    <security-realm name="ManagementRealm">
        <authentication>
            <local default-user="$local" skip-group-loading="true"/>
            <properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/>
        </authentication>
        <authorization map-groups-to-roles="false">
            <properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>
        </authorization>
    </security-realm>
    <security-realm name="ApplicationRealm">
        <authentication>
            <local default-user="$local" allowed-users="*" skip-group-loading="true"/>
            <properties path="application-users.properties" relative-to="jboss.server.config.dir"/>
        </authentication>
        <authorization>
            <properties path="application-roles.properties" relative-to="jboss.server.config.dir"/>
        </authorization>
    </security-realm>
    <security-realm name="UndertowRealm">
        <server-identities>
            <ssl>
                <keystore path="my.jks" relative-to="jboss.server.config.dir" keystore-password="mypass" alias="demo" key-password="mypass"/>
            </ssl>
        </server-identities>
    </security-realm>
</security-realms>

Agregando un listener https

Por ultimo, debe crearse un listener https dentro de la declaración del subsistema Untertow, el cual debe verse de la siguiente forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<subsystem xmlns="urn:jboss:domain:undertow:1.2">
    <buffer-cache name="default"/>
    <server name="default-server">
        <http-listener name="default" socket-binding="http"/>
        <https-listener name="https" socket-binding="https" security-realm="UndertowRealm"/>
        <host name="default-host" alias="localhost">
            <location name="/" handler="welcome-content"/>
            <filter-ref name="server-header"/>
            <filter-ref name="x-powered-by-header"/>
        </host>
    </server>
    <servlet-container name="default">
        <jsp-config/>
        <websockets/>
    </servlet-container>
    <handlers>
        <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
    </handlers>
    <filters>
        <response-header name="server-header" header-name="Server" header-value="WildFly/8"/>
        <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
    </filters>
</subsystem>

De nuevo, debe notarse que el security-realm coincide con el creado inicialmente.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *