disponibilidad comandos clusvcadm cluster alta java ssl ssl-certificate hostname

java - comandos - clusvcadm



Java SSL: cómo deshabilitar la verificación del nombre de host (3)

No hay verificación de nombre de host en los zócalos Java SSL estándar o, de hecho, SSL, por lo que no puede establecerlo en ese nivel. La verificación del nombre de host es parte de HTTPS (RFC 2818): por eso se manifiesta como javax.net.ssl.HostnameVerifier, que se aplica a una HttpsURLConnection.

¿Hay alguna manera para que los sockets SSL java estándar deshabiliten la verificación del nombre de host para las conexiones ssl con una propiedad? La única forma que encontré hasta ahora es escribir un verificador de nombre de host que devuelve verdadero todo el tiempo.

Weblogic proporciona esta posibilidad, es posible desactivar la verificación del nombre de host con la siguiente propiedad:

-Dweblogic.security.SSL.ignoreHostnameVerify


También tuve el mismo problema al acceder a los servicios web RESTful. Y me su con el siguiente código para superar el problema:

public class Test { //Bypassing the SSL verification to execute our code successfully static { disableSSLVerification(); } public static void main(String[] args) { //Access HTTPS URL and do something } //Method used for bypassing SSL verification public static void disableSSLVerification() { TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServerTrusted(X509Certificate[] certs, String authType) { } } }; SSLContext sc = null; try { sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); } catch (KeyManagementException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); HostnameVerifier allHostsValid = new HostnameVerifier() { public boolean verify(String hostname, SSLSession session) { return true; } }; HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); } }

Funcionó para mí ¡¡intentalo!!


Debería ser posible crear un agente Java personalizado que anule el HostnameVerifier predeterminado:

import javax.net.ssl.*; import java.lang.instrument.Instrumentation; public class LenientHostnameVerifierAgent { public static void premain(String args, Instrumentation inst) { HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { public boolean verify(String s, SSLSession sslSession) { return true; } }); } }

Luego solo agrega --javaagent:LenientHostnameVerifierAgent.jar a los argumentos de inicio de java del programa.