How to fix the "java.security.cert.CertificateException: No subject alternative names present" error? How to fix the "java.security.cert.CertificateException: No subject alternative names present" error? java java

How to fix the "java.security.cert.CertificateException: No subject alternative names present" error?


I fixed the problem by disabling HTTPS checks using the approach presented here:

I put following code into the the ISomeService class:

static {    disableSslVerification();}private static void disableSslVerification() {    try    {        // Create a trust manager that does not validate certificate chains        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) {            }        }        };        // Install the all-trusting trust manager        SSLContext sc = SSLContext.getInstance("SSL");        sc.init(null, trustAllCerts, new java.security.SecureRandom());        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());        // Create all-trusting host name verifier        HostnameVerifier allHostsValid = new HostnameVerifier() {            public boolean verify(String hostname, SSLSession session) {                return true;            }        };        // Install the all-trusting host verifier        HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);    } catch (NoSuchAlgorithmException e) {        e.printStackTrace();    } catch (KeyManagementException e) {        e.printStackTrace();    }}

Since I'm using the https://AAA.BBB.CCC.DDD:9443/ISomeService for testing purposes only, it's a good enough solution, but do not do this in production.

Note that you can also disable SSL for "one connection at a time" ex:

 // don't call disableSslVerification but use its internal code: HttpURLConnection conn = (HttpURLConnection) url.openConnection(); if (conn instanceof HttpsURLConnection) {    HttpsURLConnection httpsConn = (HttpsURLConnection) conn;    httpsConn.setHostnameVerifier(allHostsValid);    httpsConn.setSSLSocketFactory(sc.getSocketFactory()); }


I've the same problem and solved with this code.I put this code before the first call to my webservices.

javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(  new javax.net.ssl.HostnameVerifier(){      public boolean verify(String hostname,             javax.net.ssl.SSLSession sslSession) {          return hostname.equals("localhost"); // or return true      }  });

It's simple and works fine.

Here is the original source.


This is an old question, yet I had the same problem when moving from JDK 1.8.0_144 to jdk 1.8.0_191

We found a hint in the changelog:

Changelog

we added the following additional system property, which helped in our case to solve this issue:

-Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true