« Atrás

Activación de HTTPS, JBoss 5.1

Introducción

TCP/IP no ha sido diseñado para proteger los paquetes de datos que se mueven. Existen programas gratuitos que permiten analizar y filtrar los datos intercambiados con máquinas de la misma LAN. Aún más inseguras son las redes inalámbricas cuyas señales pueden ser interceptadas sin necesidad de conexión física. Los protocolos de aplicación tampoco intentan proteger los datos de la aplicación. SSL surge como protocolo para solventar este problema.

El protocolo HTTPS se apoya en SSL para proporcionar confidencialidad en la comunicación:

Para que el servidor de aplicaciones JBoss sea capaz de gestionar este sistema de seguridad debe manejar almacenes de claves Java y certificados digitales.

Creación de un almacén de claves y un certificado digital para el servidor

Almacén de claves y entrada asimétrica

 Se pasa a describir el proceso para crear un almacén de claves estándar JKS (Java KeyStore) y un par de claves asimétricas (pública/privada). Para ello utilizaremos la herramienta administrativa keytool:

 > keytool -genkey -alias server -keyalg RSA -validity 1500 -keystore server.keystore
 Escriba la contraseña del almacen de claves:  
Volver a escribir la contraseña nueva:
?Cuales son su nombre y su apellido?
  [Unknown]:  Jesus Salinas
?Cual es el nombre de su unidad de organizacion?
  [Unknown]:  ematiz
?Cual es el nombre de su organizacion?
  [Unknown]:  ematiz
?Cual es el nombre de su ciudad o localidad?
  [Unknown]:  Sevilla
?Cual es el nombre de su estado o provincia?
  [Unknown]:  Sevilla
?Cual es el codigo de pa?s de dos letras de la unidad?
  [Unknown]:  ES
?Es correcto CN=Jesus Salinas, OU=ematiz, O=ematiz, L=Sevilla, ST=Sevilla, C=ES?
  [no]:  si

Escriba la contraseña clave para <server>
    (INTRO si es la misma contraseña que la del almacen de claves):  
Volver a escribir la contraseña nueva: 

Gracias a la sentencia anteriormente descrita se han creado simultáneamente un almacén de claves llamado server.keystore y una entrada de tipo RSA. La contraseña del almacén y de la entrada es server.

Este tipo de entrada genera de forma implícita un certificado autofirmado NO válido en un sistema real pero que para este ejemplo será útil.

Definir un conector seguro para HTTP

Vamos a editar el fichero server.xml que se encuentra en la carpeta ${JBOSS_HOME}/deploy/jbossweb.sar

Se descomenta el codigo del conector SSL/TLS:

      <!-- SSL/TLS Connector configuration using the admin devl guide keystore
      <Connector protocol="HTTP/1.1" SSLEnabled="true"
           port="8443" address="${jboss.bind.address}"
           scheme="https" secure="true" clientAuth="false"
           keystoreFile="${jboss.server.home.dir}/conf/chap8.keystore"
           keystorePass="rmi+ssl" sslProtocol = "TLS" />
      -->

El fichero server.keystore, previamente creado, se copia  en la ruta ${JBOSS_HOME}/conf. Una vez hecho esto, se edita el conector introduciendo modificaciones en los parámetros keystoreFile y keystorePass adaptándolos a las características del ejercicio. El resultado es el siguiente:

      <Connector protocol="HTTP/1.1" SSLEnabled="true"
           port="8443" address="${jboss.bind.address}"
           scheme="https" secure="true" clientAuth="false"
           keystoreFile="${jboss.server.home.dir}/conf/server.keystore"
           keystorePass="server" sslProtocol = "TLS" />

Una vez realizadas estas operaciones el servidor puede trabajar vía HTTPS.

Ejemplo de navegación

Suponemos la existencia de una aplicación web llamada ProyectoWeb01. Al acceder mediante el navegador a la siguiente url, https://localhost:8443/ProyectoWeb01, si el certificado asociado al servidor no es fiable (como es el caso en el ejemplo) el navegador nos muestra el siguiente mensaje:

El certificado que utiliza el servidor es autofirmado. Si mediante el navegador se acepta el certificado se accederá a la aplicación de forma segura.

Comentarios
URL de Trackback:

comments powered by Disqus