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.

Zulu JVM – Una distribución OpenJDK alternativa

Zulu-Duke

Luego de redactar el post anterior respecto al fin del camino para Java 7, noté que no había comentado ninguna alternativa libre/freetard/open source (el que más les guste), y también noté que el JDK libre que utilizo actualmente en mi sistema -IcedTea- aun no tiene disponible un JDK de nivel 8.

Fue así que decidí darle una ojeada a Zulu JVM, una JVM que había estado evitando básicamente por falta de tiempo y que ya tiene alrededor de un año en el mercado. Zulu es una compilación de OpenJDK proveida por Azul Systems, y que entre otras cosas ha tenido cierta notoriedad por ser la JVM elegida por Microsoft para despliegues en Azure.

Al igual que IcedTea, Zulu es una «distribución JVM» lo que significa que basa su código en el árbol de OpenJDK y agrega sus propias particularidades, entre estas puedo mencionar:

  • De momento solo es compatible con Windows y Linux
  • Se enfoca en despliegues de servidor (similar a la Server JRE)
  • Actualmente no incluye plugin para webstart -i.e. no sirve para ejecutar applets-
  • Es posible descargar JDKs nivel 6, 7 y 8
  • Cuenta con contratos comerciales de soporte si fueran necesarios y conserva el status 100% GPL de OpenJDK.

A diferencia de IcedTea que tiene objetivos más ambiciosos como soporte a ZeroVM+Shark, JamVM, CACAO y un plugin Web, Zulu provee una compilación relativamente limpia con un objetivo bastante definido que al basarse en la OpenJDK ofrece compatibilidad total con el Java TCK.

En mi pruebas fui capaz de programar durante 1 semana utilizando Eclipse y Wildfly sin mayores inconvenientes, además de esto en el terreno de escritorio Zulu es capaz de ejecutar un programa tan personalizado como Vuze.

Vuze Bittorrent Client _001

Puede ser una opción interesante para aquellos que requieran seguir con Java 7, especialmente en Windows ya que IcedTea esta bastante enfocado en Linux. Y por ultimo nunca esta de más comentar que estas son las ventajas de un ecosistema abierto de desarrollo, la independencia de proveedor :).

Fin del camino para Java 7

dead-end

Luego de 4 años del primer lanzamiento 100% Oracle, llegó la hora de decirle adios a Java 7 (o al menos a la máquina virtual HotSpot 7).

Recientemente Oracle ha anunciado que a partir del 20 de Enero de 2015, todos aquellos usuarios con una instalación de Java Runtime Environment (JRE) en Windows y OS X seran migrados automáticamente a Java 8 (siempre y cuando tengan las auto actualizaciones habilitadas).

Y para todos aquellos desarrolladores/implementadores que tengan instalado un Java Developer Kit (JDK) o Server JRE versión 7 se les recuerda que a partir de abril 2015 Oracle ya no publicara actualizaciones. En este sentido vale la pena recordar que Java 8 fue lanzado en marzo 2014, por lo cual ya es considerado bastante estable.

Para los usuarios corporativos, la transición debe hacerse sin mayores complicaciones ya que Java es conocido por tener compatibilidad hacia atras y siempre hay opción de obtener soporte extendido mediante Oracle, IBM o Azul.

 

5 Tecnologías que dejan de ser hipster en 2015

hipcoffee

Luego de un merecido descanso de fin de año en donde las clases medias y medias bajas de Latinoamerica han acabado sus bonos navideños en diversiones efímeras . . . nos llega el momento de retomar el código.

Uno de los aspectos más difíciles en TI es saber distinguir las tendencias del ruido, especialmente porque las tecnologías tienen un ciclo bastante predecible donde nacen, su comunidad crece, se forkean/se consolidan o mueren. Y es solo en esta ultima etapa donde se da la separación de tecnologías hipster moribundas de los COBOL/FORTRAN del mañana.

El 2014 (como todos los años) vio evolucionar propuestas hipsters, donde algunas ganaron momentum y viejos conocidos tuvieron un segundo aire. Entre estas, algunas de mis favoritas fueron:

  1. Docker: Pasaron demasiados años para que todo el sector de TI se diera cuenta que podíamos prescindir de Windows algunos sistemas operativos para desplegar aplicaciones. Con esto, el complejo trabajo para mejorar la virtualizacion se hizo a un lado para crear una solución más lógica, isolar las aplicaciones en contenedores sobre un kernel compartido. Luego de la evolución de LXC, Docker revolucionó la forma de distribuir stacks (ugh spanglish) tecnológicos y de desplegar aplicaciones.
  2. Microservicios: Con grandes casos como el de Netflix, vimos como todos aquellos libros de SOA que odiábamos en la facultad tal vez no estaban del todo bien. Consecuentemente vimos que un abordaje más «hacker» puede en ciertas ocasiones superar a las ideas salidas de los laboratorios de IBM y Microsoft. Los microservicios llegaron para quedarse y ya tenemos para todos los gustos, sea Java, Ruby, Python o incluso plataformas políglotas.
  3. MVVM: Los navegadores dejaron de ser tontos y aunque Javascript (ugh Javascript) sigue siendo feo, frameworks como AngularJS o EmberJS le dieron un sentido declarativo a un mundo que llevaba demasiado tiempo siendo imperajQuerytivo.
  4. Programación funcional: Confieso que este es un cambio que aun no trago por completo, sin embargo lenguajes como Scala se han masificado, lenguajes como Ceylon se han popularizado y estoy 90% seguro que las nuevas generaciones de Universitarios de CS tendrán en ellos la admiración que algun dia tuvimos con nuestro primer objeto encapsulado, polimorfico, heredado y abstracto. El hype ha sido tanto que, ya lenguajes tradicionales como Java o C# tienen su dosis de funcional.
  5. NoSQL: Estuve en duda si mencionar NoSQL o no, ya que considero que ahora es bastante mainstream. Sin embargo con PostgreSQL «mutando» a variantes NoSQL, y MongoDB ganando tantos adeptos como las fotos de Jennifer Lawrence, 2014 fue el año en que NoSQL dejó de ser hipster definitivamente.

¿Que nos espera este año?

De nuevo, debo resaltar que es bastante difícil distinguir entre ruido (¿Web 3.0?) y tendencias, sin embargo creo que 2015 traera cosas como:

Y me atrevo a pensar que algunas tecnologías deberían evolucionar o continuara su debacle

  • Wearables (¿necesitamos más Google Glass?)
  • Herramientas CASE (scaffolders unidos jamas seran vencidos)
  • P2P centralizado (a veces me avergüenzo de la humanidad y sus acciones
  • Windows (¿alguien usa Windows Phone?)
  • Microconsolas (la unica que me ha llamado la atencion ha sido mi netbook corriendo roms de Mario)

Si llegaron hasta aca, sera un gusto compartir este mundo con ustedes :).

Habilitar soporte para Logitech Rumblepad 2 en Gentoo Linux

17035__82327
Desde hace algunos años poseo un control Logitech Rumblepad 2 y aunque el modelo ya esta bastante desfasado, es uno de los grandes favoritos de todos los tiempos por su distribución de botones similar a la de Play Station y su excelente construcción.

Con la llegada de Steam en Linux me vi en la necesidad de hacerlo funcionar ya que por fin tenia sentido tener un Gamepad. Y luego de dar algunas vueltas, me decidi relatar algunos pasos necesarios para que el control funcione sin problemas:

Habilitar el soporte para joystick y USB

Lo primero que hay que hacer para que este control funcione es dar/verificar el soporte a joystick y dispositivos USB, para esto debemos habilitar  al menos los siguientes modulos en el kernel:

Device Drivers -->
 Input Device Support -->
  <*> Joystick Interface
  <*> Event Interface
 USB Support -->
  <*> Support for Host-side USB
  <*> xHCI HCD (USB 3.0) support
  <*> EHCI HCD (USB 2.0) support
  <*> UHCI HCD (most Intel and VIA) support

 

Habilitar el soporte HID Logitech

Una de las cosas más confusas de dar soporte a joysticks USB es que además de habilitar el soporte de joystick y USB debe habilitarse el soporte HID,  donde cada dispositivo tiene su propio driver. En el caso de el control este modulo se denomina LOGIRUMBLEPAD2_FF, para lo cual hay que habilitar los siguientes modulos:

Device Drivers -->
 HID support -->
  <*> Generic HID driver
  Special HID drivers -->
   <M> Logitech devices
    [*]   Logitech force feedback support (variant 2)

Luego, basta con recompilar el kernel y/o compilar los modulos, si todo sale bien la salida de dmesg deberia ser igual a la siguiente:

[21474.424187] usb 2-1.3: USB disconnect, device number 15
[21475.883213] usb 2-1.3: new low-speed USB device number 16 using ehci-pci
[21475.998790] input: Logitech Logitech RumblePad 2 USB as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/0003:046D:C218.000E/input/input26
[21475.999009] logitech 0003:046D:C218.000E: input: USB HID v1.10 Joystick [Logitech Logitech RumblePad 2 USB] on usb-0000:00:1d.0-1.3/input0
[21475.999048] logitech 0003:046D:C218.000E: Force feedback for Logitech variant 2 rumble devices by Anssi Hannula <anssi.hannula@gmail.com>

Ahora queda en nosotros comprar un par de juegos en Steam :).

Cambios en el esquema de versiones de Java

Duke_Int_Float_Char.gif
Como si aun no fuera complicado, Oracle ha anunciado que el esquema de versiones de Java volverá a cambiar a partir del lanzamiento Java SE 7u71. Siendo así, ahora tendremos tres tipos de lanzamientos que resumo en el siguiente listado:

  • Limited update (LU): Son actualizaciones periódicas que incluyen funcionalidades nuevas, estos lanzamientos son identificados porque la versión es un numero múltiplo de 20, -e.g. SE 7u20, SE 7u40-.
  • Critical patch update (CPU): Son actualizaciones de seguridad criticas, que pueden producirse entre lanzamientos limitados. Son nombrados con números impares en pasos de 5, por ejemplo entre el lanzamiento de Java SE 7U20 y SE 7u40 pueden existir los siguientes cpu 7U25, 7U31, 7U35. Si el múltiplo de 5 es par, se le añade un número para ser impar.
  • Patch set update (PSU) (nuevo): Junto con los CPU Oracle estará lanzando actualizaciones PSU, estas incluyen todas las correcciones de seguridad del CPU, y otras mejoras no enfocadas en seguridad (es decir mejoras incrementales hasta tener disponible un LU). Estos lanzamientos son identificados por números pares con una unidad más al CPU con el cual fue lanzado. Por ejemplo al lanzar el CPU 7u71, se podrá optar por utilizar el PSU 7u72.

El orden de prioridad para mantener la estabilidad de los entornos de producción debería ser el siguiente

  • Si la actualización es un LU debe aplicarse inmediatamente
  • Si la actualización incluye un CPU y un PSU debería darsele prioridad al CPU y elegir el PSU en caso que este lanzamiento solucione algún problema especifico (para ver los cambios en el PSU puede consultarse el historial de notas de lanzamiento de cada JDK).

Java Day Guatemala 2014 – In the Internet of everything, Java is the glue

g64
El grupo de usuarios y desarrolladores Java de Guatemala -Guatejug- les hace la cordial invitación para participar en el Java Day Guatemala 2014, el evento Java más grande de Centroamérica.

El evento sera realizado el sábado 11 de octubre en el centro TICS del INTECAP, calle del estado Mateo Flores de la ciudad de Guatemala.

Como en todos los años la entrada es totalmente libre.

Si desean mas información del evento, hay un sitio web dedicado donde se estarán publicando las actualizaciones:

http://guate-jug.net/javaday2014/

¿Porque debería asistir? Pues bien Java sigue siendo el lenguaje #1 a nivel mundial

07dataflow-1403643424680

Y porque es cool :).

Gentoo Linux – Iron Penguin Edition

Mark_42_ava

Siguiendo con la tradición de lanzar ediciones especiales en fechas aleatorias, el equipo de Gentoo Linux nos trae la nueva edición denominada «Iron Penguin Edition».

Iron Penguin es una colección de paquetes colaborativa en formato LiveDVD, para celebrar la continua colaboración entre usuarios y desarrolladores de Gentoo, esta compilación incluye entre otros:

  • Linux Kernel 3.15.6
  • Xorg 1.16.0
  • KDE 4.13.3
  • Gnome 3.12.2
  • XFCE 4.10
  • Fluxbox 1.3.5
  • LXQT Desktop 0.7.0
  • i3 Desktop 2.8
  • Firefox 31.0
  • LibreOffice 4.2.5.2
  • Gimp 2.8.10-r1
  • Blender 2.71-r1
  • Amarok 2.8.0-r2
  • Chromium 37.0.2062.35
  • Y muchos más!

La lista completa de paquetes se encuentra disponible tanto para x86, como para amd64.

Luego de descargar y probar el LiveDVD debo decir que este no es instalable, pero si puede usarse como medio de instalación ya que trae todas las herramientas necesarias para instalar Gentoo (o Funtoo).

Aunque el LiveDVD incluye casi cualquier escritorio disponible en Gentoo Linux (falto awesome 🙁 ), debo decir que como demostración solo KDE esta realmente pulido. Para los que no quieran probar el DVD pero si quieran ver el arte gráfica y usarla en su equipo, ya existe un sitio web dedicado a este propósito.

Acá dejo algunas capturas:

 

Sitios utiles que todo usuario de Gentoo y derivados debe conocer

Gentoo Logo

Hoy me detuve a pensar que tengo ya casi 9 años de usar 95% del tiempo Linux y aproximadamente 8 años de usar Gentoo (y derivados) como mi distribución principal.

En este tiempo he logrado conocer algunos sitios web «periféricos» o «no oficiales» que abundan en los foros, y que a la larga son bastante útiles, incluso más que la documentación oficial. Así pues, dejo un listado de estos sitios:

Distribuciónes derivadas de Gentoo Linux

Activas hasta 2014

  • Sabayon Linux: Sabayon es el derivado más popular de Gentoo, es una distribución con diseño gráfico muy pulido y que dispone de un enorme repositorio de paquetes binarios. Era mi derivada favorita antes de dejar de dar soporte a arquitecturas de 32 bits.
  • Calculate Linux:  Mientras que Sabayon pretende llevar Gentoo al usuario comun, Calculate pretende llevarlo a entornos corporativos. Cuenta con menos paquetes binarios que Sabayon pero en mi experiencia requiere de menos hacks para ser compatible con Gentoo.
  • Funtoo Linux: Funtoo es un refrito de la mano de Daniel Robbins, con ciertas personalizaciones y basada totalmente en compilación es la derivada más fiel, fui usuario durante 3 años y solo cambie por el tema de SystemD.
  • SystemRescueCD: Distribución enfocada al rescate de sistemas, cuenta con una amplia variedad de herramientas y es probablemente la distribución Gentoo más difundida (ya que hasta donde yo se es incluso más popular que el propio Gentoo).
  • ChromiumOS: Es la base para ChromeOS, el sistema operativo distribuido en los computadores Google, si consideramos la cuota de mercado de ChromeOS podríamos decir que Gentoo esta más cerca de la dominación mundial que tanto desea Debian.
  • PBXWare: Es una distribución destinada a la creacion de IVRs, usa Gentoo como su base (una elección bastante peculiar).

Activas hasta 2013

  • TinHat Linux: Es una distribución cuya meta es ofrecer la mayor seguridad posible, esta basada en Gentoo Hardened.
  • Pentoo Linux: Distribución que incluye herramientas para pruebas de pentesting.
  • Liberté Linux: Distribución enfocada en proveer al usuario un LiveCD que garantice (o al menos intente) comunicaciones anónimas.
  • Toorox Linux: Una distribución de proposito general sin un objetivo aparente, a opinion personal su objetivo es demostrar que una distribucion linux puede ser tan fea como uno se lo proponga.

Sitios útiles

Sitios oficiales

  • Gentoo Wiki: Actualmente la Gentoo Wiki es el repositorio oficial de documentación para Gentoo Linux, fue inspirada en una antigua wiki no oficial que llego a tener mayor y mejor documentación que la propia documentación creada por el proyecto Gentoo.
  • Gentoo Infrastructure Status: Uno de los nuevos chicos nuevos del barrio, proporciona una visión rápida de todos los servicios ofrecidos por el proyecto Gentoo y el estado de los mismos.
  • Gentoo Packages: Permite explorar los paquetes que componen Gentoo, con enlaces utiles a use flags, bugs, changelogs y temas activos en los foros.
  • Gentoo Forums: La comunidad de usuarios de Gentoo es bastante conocida por preferir los foros en lugar de las listas de correo, si necesitas ayuda este es el lugar.
  • Gentoo Bugzilla: Donde todo inicia, evoluciona y termina, tracker de bugs del proyecto Gentoo.

Sitios no oficiales

  • Gentoo Portage Overlays: Se dice que si un paquete no esta en Gentoo, esta en un overlay de Gentoo. GPO indexa estos overlays para saber en cual overlay (oficiales y no oficiales) encontraremos un paquete.
  • Gentoo Browse: Provee un navegador alternativo a los paquetes dentro de Gentoo, algunas de sus características destacables es publicar los ebuilds más nuevos en orden cronológico, un ranking de los paquetes más consultados, una interfaz considerablemente más actual.
  • The fresh ebuilds: Otro explorador de paquetes alternativo, contiene menos detalles que Gentoo Browse, pero conserva los enlaces a foros, listas de correo, bugzilla y  USE flags de cada paquete.
  • Gentoo Wiki Archives: Hace mucho tiempo la Gentoo Wiki era el proyecto comunitario más activo de Gentoo, lastimosamente la infraestructura tuvo problemas y tuvo una muerte peculiar. Sin embargo en este mirror se conservan los archivos de esa Gentoo Wiki, hay que tomarlos con cuidado ya que al ser un archivo historico, muchos links ya no son validos.
  • Pinguinos gentoo en NatGeo: Son adorables, son los más rapidos de la tierra, son los pingüinos gentoo!.

Llamada de trabajos Java Day 2014

UncleDuke-187x300

El grupo de usuarios Java de Guatemala les hace la cordial invitación para formar parte como expositores de la conferencia Java más grande de Centroamérica.

¿Que tengo que hacer?
Las bases para participar como expositor se encuentran en el siguiente enlace:

http://guate-jug.net/javaday2014/noticias/llamada-de-trabajos-java-day-guatemala-2014/

Una vez tengan lista la propuesta, la misma debe enviarse a través del sistema de conferencias del evento:

http://www.guate-jug.net/javaday2014/openconf/

Este año tengo el gusto de formar parte del comité de steering, así que seguramente nos vemos el día del evento :).