JMS Seguro utilizando JBoss 4.x

Este documento es una guía básica para establecer comunicaciones de JMS, 
utilizando SSL o HTTPS, con el servidor JBoss 4.2.x.

Introducción
Para empezar, una introducción básica a lo que es el SSL y el HTTPS.
El protocolo TCP es un protocolo orientado a conexión, que maneja datos en el 
nivel de transporte del modelo OSI, pero no maneja nada de las capas 
superiores, tampoco temas de seguridad. Por lo tanto, cualquier persona que 
tenga acceso al medio de transmisión puede ponerse a ?escuchar? las información 
que pasa y obtener datos valiosos, filtrar información para que no llegue a 
destino e incluso, hacerse pasar por alguno de los emisores e infiltrar 
información falsa.
Por este motivo, se crea el protocolo de seguridad SSL (o Secure Sockets Layer) 
que permite conectarse de forma segura entre dos extremos de la red, mediante 
técnicas de encriptación y criptografía.
El HTTPS, es un subconjunto del SSL, que funciona utilizando el protocolo HTTP, 
pero en vez de utilizar conexiones tradicionales de TCP, utiliza conexiones de 
SSL como base, permaneciendo de forma segura.
Para poder hacer funcionar el SSL, se utilizan certificados que permiten 
asegurar la identidad de una persona y un nodo en la red. Estos son 
certificados por las entidades certificadoras quienes validan los datos del 
solicitante, y adjuntan su certificado para probar la veracidad.
El certificado tiene dos claves: una privada (que solo conoce el propietario 
del certificado) y una pública (que conocen todos los usuarios, está encriptada 
y se arma en base a la privada, con 128, 512, o 1024 bits de datos).
Con todo esto, se arma el SSL.


Obtención de un Certificado

Paso 1: Generación del certificado
El certificado lo vamos a armar con un programa que viene con el SDK de Sun 
llamado keytool.  Para ver la lista de comandos tipear keytool ?help.
Para generar un certificado se escribe lo siguiente:

keytool -genkey -alias alias_del_certificado 

donde alias es un nombre distintivo para reconocer el certificado en el almacén 
de certificados o keystore. Si no se agrega nada, se generará en el almacén 
correspondiente al archivo user.home/.keystore. Para cambiar este archivo se 
puede poner el flag ?keystore nombre_del_archivo_keystore.
Luego se pide una clave del keystore (si no existe se creará al ingresarla) 
para poder realizar cualquier operación. Hecho esto aparecerán una serie de 
preguntas

¿Cuáles son su nombre y su apellido?
Aquí deberá ingresar el nombre del host. Por ejemplo, ?localhost.localdomain? 
esto deberá corresponder con el nombre de su máquina (que en linux podrá 
obtener mediante el comando hostname). En caso de ser un server de internet 
podrá ser por ejemplo ?server.mydomain.com?.
¿Cuál es el nombre de su unidad de organización? Ingrese lo correspondiente.
¿Cuál es el nombre de su organización? Ingrese lo correspondiente.
¿Cuál es el nombre de su ciudad o localidad? Ingrese lo correspondiente.
¿Cuál es el nombre de su estado o provincia? Ingrese lo correspondiente.
¿Cuál es el código de país de dos letras de la unidad?
Aquí deberá ingresar el código de dos letras correspondiente a su país como por 
ejemplo US para estados unidos.
Finalmente, se le preguntará por la confirmación de los datos
¿Es correcto CN=xxxx, OU=xxx, O=xxx, L=xxx, ST=xx, C=xx?
Y al confirmar se le  pedirá el que ingrese la clave privada del certificado, 
terminando la generación.


Paso 2: Firma del certificado
En este ejemplo realizaremos nosotros mismos la firma de certificado para poder 
utilizarlo en nuestro servidor. Para hacerlo se deberá tipear en el prompt:

keytool -selfcert -alias alias_del_certificado -validity 365 -keysize 1024

Esto genera un certificado para el alias ingresado con una validez de 365 días 
y con un tamaño de 1024 bits.
Se le pedirá que ingrese la clave del almacén y luego el certificado quedará 
firmado por usted mismo.


Configuración del JBoss para Seguridad SSL / HTTPS
Tomaremos como referencia el directorio serverdir que apunta al directorio de 
instalación del servidor/server/su_server_que este_usando, típicamente ?all? o 
?default?.

Paso 1: Habilitar el SSL en el JBoss
Entonces, copiaremos el archivo del keystore donde generamos el certificado a 
serverdir/conf con algún nombre, por ejemplo local.keystore.
Luego editamos el archivo 
serverdir/deploy/jbossweb-tomcat41.sar/META-INF/jboss-service.xml
Allí quedaría de la siguiente manera

<?xml version="1.0" encoding="UTF-8"?>
<!-- The service configuration for the embedded Tomcat4.1.x web container
-->

   
        
                
        
        local.keystore
        apache
   

   

(continúa el archivo ...)

               <!-- A AJP 1.3 Connector on port 8009 -->
               

               <!-- SSL/TLS Connector configuration using the SSL domain 
keystore -->
               
                 <Factory className = 
"org.apache.coyote.tomcat4.CoyoteServerSocketFactory"
                   keystoreFile="${jboss.server.home.dir}/conf/local.keystore"
                   keystorePass="test123?
                   protocol = "TLS"/>
               
               <!-- -->
            
         
      
      jboss:service=TransactionManager
   

Nota: El SSL con esta configuración está en el puerto 443, con lo cual hay que 
iniciar el servidor como root. Se pueden modificar los parámetros para que se 
inicie por ejemplo en el puerto 8443


Paso 2.1: Configurar JBoss para utilizar JMS con HTTPS
Ahora editamos el archivo 
serverdir/deploy/jms/jbossmq-httpil.sar/META-INF/jboss-service.xml quedando de 
la siguiente manera (se reemplaza localhost.localdomain por el nombre de Server 
que se ingresó en el certificado):
<?xml version="1.0" encoding="UTF-8"?>


    
    <depends optional-attribute-name="Invoker">jboss.mq:service=Invoker
    jboss.web:service=WebServer
    HTTPConnectionFactory
    HTTPXAConnectionFactory
    0
    60
    0
     https://localhost.localdomain/jbossmq-httpil/HTTPServerILServlet
  


Finalmente, en el código en vez de pedir un OIL2 o UIL2ConnectionFactory, pedir 
un HTTPConnectionFactory. Eso es todo. Para poder ver en el programa que es lo 
que ocurre con el SSL, se deberán ejecutar los programas con el siguiente 
parámetro ?-Djavax.net.debug=all?.


Paso 2.2: Configurar el JBoss para usar JMS con SSL
Ahora creamos el archivo serverdir/deploy/jms/ssluil2-service.xml con el 
siguiente contenido:


        <depends optional-attribute-name="Invoker">jboss.mq:service=Invoker

        SSLSUIL2ConnectionFactory
        SSLSUIL2XAConnectionFactory
        ${jboss.bind.address}
        8193
        60000
        true
        <!-- Used to disconnect the client if there is no activity -->
        <!-- Ensure this is greater than the ping period -->
        70000
        <!-- The size of the buffer (in bytes) wrapping the socket -->
        <!-- The buffer is flushed after each request -->
        2048
        <!-- Large messages may block the ping/pong -->
        <!-- A pong is simulated after each chunk (in bytes) for both reading 
and writing -->
        <!-- It must be larger than the buffer size -->
        1000000
        org.jboss.security.ssl.ClientSocketFactory
        org.jboss.security.ssl.DomainServerSocketFactory
        java:/jaas/local



Finalmente, en el código en vez de pedir un OIL2 o UIL2ConnectionFactory, pedir 
un SSLUIL2ConnectionFactory. Eso es todo. Para poder ver en el programa que es 
lo que ocurre con el SSL, se deberán ejecutar los programas con el siguiente 
parámetro ?-Djavax.net.debug=all?.

Paso 2.3: Agregar al jboss-service.xml del httpHaInvoker el siguiente atributo:
     https://localhost.localdomain/invoker/InvokerServlet

TESTING:

Trate de ingresar a: 

https://localhost.localdomain/invoker/InvokerServlet 

si responde  correctamente, la configuracion es un exito


View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3933828#3933828

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3933828


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid0944&bid$1720&dat1642
_______________________________________________
JBoss-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to