Estás en:

Consultor tecnológico de desarrollo de proyectos informáticos.

 Ingeniero Técnico en Telecomunicaciones

Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factoría y formación

Somos expertos en Java/J2EE

Fecha de publicación del tutorial: 2006-11-29
Tutorial visitado 20.323 veces20.323
Descargar el tutorial en PDF


Regístrate para votar
Share |
INTRODUCCIÓN A XPATH

CREACIÓN E INVOCACIÓN DE WEBSERVICES POR SSL

Los ejemplos de este tutorial están hechos con el siguiente entorno de desarrollo:
  • Jboss Eclipse IDE Milestone 5.

  • JDK 1.4
  • JBoss 4.0.4 GA

  • Axis 1.3

En este tutorial se pretende enseñar al lector, (si aún no lo sabe), a desplegar un webservice usando SSL y a invocarlo correctamente. Se presupone que el lector ya sabe instalar axis, crear un webservice y desplegarlo en axis, generar un certificado autofirmado, importar y exportar el certificado e instalarlo en JBoss .  Si no es así, hay varios tutoriales en adictosaltrabajo.com que explican como realizarlo. No obstante, durante el desarrollo del tutorial se mostrará como realizarlo sin entrar en detalle.

GENERACIÓN DEL CERTIFICADO.

Lo primero que hemos de hacer para trabajar con SSL es generarnos un certificado con su par de claves.

Lo haremos con la herramienta keytool de la JDK 1.4.

> keytool -v -genkey -alias PACO_PAIR -keystore AUTENTIA_KEYS.ssl

Rellenad la información que os pide (no os olvideis de la contraseña)

Generamos un par que llamamos PACO_PAIR y la almacenamos en el fichero AUTENTIA_KEYS.ssl.

INSTALACIÓN DEL CERTIFICADO.

Una vez generado el certificado, lo "instalaremos" en JBoss. Para ello, copiaremos el fichero que acabamos de generar (AUTENTIA_KEYS.ssl) a la ruta de JBoss:  

 <INSTALACION_JBOSS>\server\default\conf

Vamos a configurar el JBoss para que abra el puerto SSL e indicarle el almacén de certificados que queremos usar:

Editamos el fichero:

 <INSTALACION_JBOSS>\server\default\deploy\jbossweb-tomcat55.sar\server.xml

Buscad la siguiente entrada y modificar los siguiente (no olvidéis descomentarla):

 <!-- SSL/TLS Connector configuration using the admin devl guide keystore -->
      <Connector port="8443" address="${jboss.bind.address}"
           maxThreads="100" strategy="ms" maxHttpHeaderSize="8192"
           emptySessionPath="true"
           scheme="https" secure="true" clientAuth="false"
           keystoreFile="${jboss.server.home.dir}/conf/AUTENTIA_KEYS.ssl"
           keyAlias="
PACO_PAIR"  keystorePass="autentia" sslProtocol = "TLS"          />

Le hemos "dicho" a JBoss (a tomcat en realidad) que queremos usar el puerto 8443 para comunicación SSL, usando el par de claves PACO_PAIR almacenado en AUTENTIA_KEYS.ssl, usando autentia como password para abrir el almacén.

Si arrancamos ahora JBoss, podemos comprobar el resultado arrancando algun navegador y conectándonos al servidor:
   
    http://localhost:8443

Al ser un certificado autofirmado, nos muestra el siguiente mensaje:

Mensaje informativo certificado


Si le decimos examinar certificado, veremos la información que rellenamos previamente al generarlo:

Detalle certificado


CREAMOS Y DESPLEGAMOS EL WEBSERVICE EN AXIS.

Nos creamos un interfaz donde definir los métodos del webservice. Nosotros, para hacerlo fácil y rápido, crearemos una clase Calculadora y le crearemos el método suma (un tanto típico):


package com.autentia.tutoriales.ws;

import java.rmi.RemoteException;

public class Calculadora {
    public int suma(int sum1, int sum2) throws RemoteException {
        return sum1 + sum2;
    }
}

Nos generamos su descriptor de despliegue (deployCalcu.wsdd):

<deployment xmlns="http://xml.apache.org/axis/wsdd/"    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> 
  <service name="Calculadora" provider="java:RPC">
  <parameter name="className" value="com.autentia.tutoriales.ws.Calculadora"/>       
       <parameter name="allowedMethods" value="*"/>    
   </service>
</deployment>


Desplegamos el servicio:

java org.apache.axis.client.AdminClient deployCalcu.wsdd

No olvidéis copiar la clase compilada en (Calculadora.class) en:

 <INSTALACION_JBOSS>\server\default\deploy\webapps\axis.war\
    WEB-INF\classes


Recordad que debéis copiar la ruta completa: com/autentia/....

Vamos a comprobar que está desplegado:

https://localhost:8443/axis/services/Calculadora?wsdl


 WSDL Ws desplegadi



INVOQUEMOS EL WEBSERVICE DESDE UN CLIENTE:

Nos creamos la clase cliente, y la invocaremos desde su método main:

package com.autentia.tutoriales.ws;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;


public class ClienteWsCalcu {
  
    public static void main(String[] args) {
        Service service = new Service();
        Call call = null;
        try {
            call = (Call) service.createCall();       
            String endpoint = "https://localhost:8443/axis/services/Calculadora";           
            call.setTargetEndpointAddress( new java.net.URL(endpoint) );           
            Object[] datos = new Object[2];       
            datos[0] = new Integer(1);
            datos[1] = new Integer(2);       
            Integer res = (Integer)call.invoke("suma",datos);       
            System.out.println("RESULTADO (DEBERIA DAR 3)---->:"+res.toString());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

Si ejecutamos el método main, veréis lo que ocurre:

Excepcion



Obtenemos una excepción de seguridad: "No trusted certicate found"

Es decir, se nos está diciendo que el certificado con el que estamos tratando no es de confianza. ¿Cómo lo resolvemos ?. Pues haciéndolo de confianza. Para ello, debemos importar el certificado en nuestro almacén de certificados de confianza:

Lo primero que haremos es importar el certificado. Vamos primero a obtenerlo (podríamos exportarlo del fichero de claves inicial pero lo vamos a hacer de otra manera)

Abrimos internet explorer: https://localhost:8443

Ver certificado

Ahora pulsamos en Ver certificado, pestaña detalles:

Detalles

Pulsamos sobre Copiar en Archivo:

Formato certificado

Seleccionamos DER binario codificado X.509 y guardamos el fichero en algún lugar del disco. Yo le he llamado: CLAVES_PACO_CLIENTE.cer

Vamos ahora a importarlo ahora al almacén de certificados de confianza:

Copiamos el fichero
CLAVES_PACO_CLIENTE.cer a la ruta:
    <RUTA_JDK>\jre\lib\security

Vamos a importar el certificado al fichero cacerts:

Importamos certificado


> keytool -v -import -file CLAVES_PACO_CLIENTE.cer -keystore cacerts

La contraseña por defecto del almacén de certificados de confianza de la JRE es "changeit"

Cuando pregunte:   ¿Confiar en este certificado? : contesta: si


Ahora, si ejecutáis el código anterior debería funcionar.

Ejecución correcta




Si aún no os funciona, probar a indicarle donde está el almacén de certificados de confianza en el arranque de la máquina virtual:

java ....  -Djavax.net.ssl.trustStore=<RUTA_COMPLETA_FICHERO_ALMACEN>

(fichero
cacerts)


Bueno, ya está todo.

Si necesitáis ayuda, ya sabéis donde encontrarnos: http://www.autentia.com





Anímate y coméntanos lo que pienses sobre este TUTORIAL:

Puedes opinar o comentar cualquier sugerencia que quieras comunicarnos sobre este tutorial; con tu ayuda, podemos ofrecerte un mejor servicio.


(Sólo para usuarios registrados)

» Registrate y accede a esta y otras ventajas «

Comentarios

  1. Raúl
    2009-07-31 - 11:55:27 AM

    Realmente me ha ayudado el documento, pero.... como sería la parte de los certificados en una máquina linux? No soy capaz de hacer un cliente con el certificado desde mi linux ubuntu hardy heron 8.04 Gracias

  2. Jimmy
    2009-05-14 - 12:18:09 AM

    Hola. Qué se puede hacer para que el cliente acepte de forma automática el certificado, sin tener que realizar este procedimiento de instalación del mismo?

  3. Ameg
    2009-04-20 - 10:58:32 AM

    El tutorial está muy bien, pero... aunque le he seguido, me sigue dando el mismo error de "No trusted certificate found" :(