title: How to disable certificate validation in java
body: <p>I need to disable Java certificate validation for testing only. So I understand the risk. I used the following tutorial: <a href="http://www.rgagnon.com/javadetails/java-fix-certificate-problem-in-HTTPS.html" rel="nofollow">http://www.rgagnon.com/javadetails/java-fix-certificate-problem-in-HTTPS.html</a></p>
  
  <p>So the code is:</p>
  
  <pre><code>import java.io.InputStreamReader;
  import java.io.Reader;
  import java.net.URL;
  import java.net.URLConnection;
  
  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 java.security.cert.X509Certificate;
  
  public class Cert {
    public static void main(String[] args) throws Exception {
      /*
       *  fix for
       *    Exception in thread "main" javax.net.ssl.SSLHandshakeException:
       *       sun.security.validator.ValidatorException:
       *           PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
       *               unable to find valid certification path to requested target
       */
      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 = 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);
      /*
       * end of the fix
       */
  
      URL url = new URL("https://www.nakov.com:2083/");
      URLConnection con = url.openConnection();
      Reader reader = new InputStreamReader(con.getInputStream());
      while (true) {
        int ch = reader.read();
        if (ch==-1) {
          break;
        }
        System.out.print((char)ch);
      }
        }
      }
  </code></pre>
  
  <p>I still get the following error. Can any body help ?</p>
  
  <pre><code>Exception in thread "main" java.io.IOException: Server returned HTTP response code: 401 for URL: https://www.nakov.com:2083/
      at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1615)
      at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
      at MainProject.Cert.main(Cert.java:56)
  </code></pre>