Estoy desarrollando una aplicación de escritorio Java y quiero consumir un servicio web en el mismo. El servicio web requiere de dos vías de conexión SSL con el mensaje de nivel de seguridad mediante el uso de binarysecuritytoken. Estoy utilizando NetBeans IDE 6.9.1 con JDK 1.6.0.23 y JAX-WS, ws contenedor. ¿Cómo me puedo comunicar con el ws sin utilizar cualquier servidor web en la máquina cliente. La mayoría de las cosas que he leído necesita tener tomcat o algún otro servidor web en la máquina cliente (configuración del almacén de claves en tomcat o así…). Es posible hacer? Por favor, sugiera algún artículo para SSL basado en ws cliente para Java aplicación de escritorio.

En palabras simples, necesito un J2SE solución para el consumo de segura SSL servicio web sin utilizar cualquier contenedor J2EE

OriginalEl autor Tausif Baber | 2011-01-18

2 Comentarios

  1. 4

    Aquí hay dos maneras de lidiar con WS a través de SSL http://ws.apache.org/xmlrpc/ssl.html.

    Forma correcta es configurar y utilizar el almacén de claves por tanto SE y EE soluciones.

    El próximo rápida solución también funciona para mí:

    package client;
    import java.security.cert.X509Certificate;
    import javax.net.ssl.HostnameVerifier;
    import javax.net.ssl.HttpsURLConnection;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.SSLSession;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;
    import javax.xml.namespace.QName;
    import ws.MyService1;
    import ws.MyService1ServiceLocator;
    public class Client {
    public static void main(String[] args) throws Exception {
    test();
    }
    public static void test() throws Exception {
    //Create a trust manager that does not validate certificate chains
    TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
    public X509Certificate[] getAcceptedIssuers() {
    return null;
    }
    public void checkClientTrusted(X509Certificate[] certs, String authType) {
    //Trust always
    }
    public void checkServerTrusted(X509Certificate[] certs, String authType) {
    //Trust always
    }
    } };
    //Install the all-trusting trust manager
    SSLContext sc = SSLContext.getInstance("SSL");
    //Create empty HostnameVerifier
    HostnameVerifier hv = new HostnameVerifier() {
    public boolean verify(String arg0, SSLSession arg1) {
    return true;
    }
    };
    sc.init(null, trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    HttpsURLConnection.setDefaultHostnameVerifier(hv);
    //use secured service
    QName qname = new QName("http://ws", "MyService1Service");
    String url = "https://127.0.0.1:7002/MyService/wsdl/MyService1.wsdl";
    MyService1 service = new MyService1ServiceLocator(url, qname).getMyService1();
    System.out.println(service.getMessage());
    }
    }
    Esta respuesta podría ser mejorado por proporcionar algunos detalles acerca de lo que el lr.Myservice1 y ws.MyService1ServiceLocator implementar, ya que no es inmediatamente evidente a partir de la solución aportada.
    muy útil gracias

    OriginalEl autor Mykhaylo Adamovych

  2. 3

    Consumir servicios web en JavaSE – ver NetBeans tutorial

    Uso BindingProvider para establecer sus propiedades antes de invocar el servicio. Ver ejemplo del uso de BindingProvider aquí

    Cómo Firmar el SOAPHeader el uso de la BindingProvidor?? Quiero añadir un firmada SOAPHeader a la solicitud/el puerto generado por JAX-WS. Existen extensiones de BindingProvidor como WSBindingProvider en jaxws-rt, pero también se utiliza un contenedor J2EE.
    Cuando el webservice publicar el WSDL, habrá descriptores de seguridad. Entonces usted utilizar wsimport para generar el lado del cliente artefacto del documento WSDL, a continuación, configurarlo adecuadamente. Hay un tutorial simple (un poco anticuado, pero los conceptos son todo lo que hay aquí (netbeans.org/kb/docs/websvc/wsit.html), utilizando Netbeans.
    Lo que se menciono anteriormente es el mensaje de nivel de seguridad. Si usted sólo desea proteger punto-a-punto con SSL, luego de ver este java-tips.org/java-ee-tips/java-api-for-xml-web-services/…
    Así que no hay solución para el problema. Tengo que instalar un servidor web(Tomcat) o un servidor de aplicación(Glassfish) en cada máquina cliente para ejecutar una pequeña aplicación. Incluso personalizados SoapHeaders no hay ningún mecanismo incorporado en J2SE y uno tiene que usar WSS4J, el eje o en el metro (por ejemplo el acceso a BinarySecurityToken o SecurityTokenReference)
    Usted menciona en su pregunta que desea consumir webserivce en JavaSE. En JDK6, hay una herramienta wsimport que genera el artefacto para un desplegado de servicio. Si la implementación del servicio de la seguridad de los descriptores en el wSDL, entonces wsimport generará un conjunto de controladores para usted como BinarySecurityToken, etc.

    OriginalEl autor Chuk Lee

Dejar respuesta

Please enter your comment!
Please enter your name here