Responder
En Java, como acceder a un webservice que necesita certificados?
Necesito programar un cliente java que acceda a un webservice (en un servidor microsoft, WS con .net) que requiere certificados (fnmt) y ssl para conectar. El codigo abreviado es como sigue:
Service service = new Service();
String endpoint = "https://www.servidor.web/AppWeb/Metodo.Asmx";
Call call = null;
try {
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol" );
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
System.setProperty("javax.net.ssl.keyStore", "/usr/jdk1.5.0_11/jre/lib/security/cacerts");
System.setProperty("javax.net.ssl.keyStorePassword","changeit");
System.setProperty("javax.net.ssl.trustStore","/usr/jdk1.5.0_11/jre/lib/securit
y/cacerts");
System.setProperty("javax.net.ssl.trustStorePassword","changeit");
System.setProperty("javax.net.debug","all");
call = (Call) service.createCall();
call.setTargetEndpointAddress( new java.net.URL(endpoint) );
String res = (String)call.invoke("nombreMetodo",null);
System.out.println("RESULTADO ---->:"+res);
} catch (Exception e) { e.printStackTrace(); }
Y el resultado, en el catch, error 403 (acceso denegado por falta de certificado). Puesto que en debug veo el fuente de la pagina entiendo que el ssl esta funcionando pero me rechaza por falta de confianza. ¿Hay que decir en algun lado que llave propia se debe usar?. ¿Algun problema de incompatibilidad de java (1.4.2 / 1.5) o Axis (1.4) con Microsoft en este aspecto?
Service service = new Service();
String endpoint = "https://www.servidor.web/AppWeb/Metodo.Asmx";
Call call = null;
try {
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol" );
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
System.setProperty("javax.net.ssl.keyStore", "/usr/jdk1.5.0_11/jre/lib/security/cacerts");
System.setProperty("javax.net.ssl.keyStorePassword","changeit");
System.setProperty("javax.net.ssl.trustStore","/usr/jdk1.5.0_11/jre/lib/securit
y/cacerts");
System.setProperty("javax.net.ssl.trustStorePassword","changeit");
System.setProperty("javax.net.debug","all");
call = (Call) service.createCall();
call.setTargetEndpointAddress( new java.net.URL(endpoint) );
String res = (String)call.invoke("nombreMetodo",null);
System.out.println("RESULTADO ---->:"+res);
} catch (Exception e) { e.printStackTrace(); }
Y el resultado, en el catch, error 403 (acceso denegado por falta de certificado). Puesto que en debug veo el fuente de la pagina entiendo que el ssl esta funcionando pero me rechaza por falta de confianza. ¿Hay que decir en algun lado que llave propia se debe usar?. ¿Algun problema de incompatibilidad de java (1.4.2 / 1.5) o Axis (1.4) con Microsoft en este aspecto?