title: Whats an easy way to totally ignore ssl with java url connections?
body: <p>I'm building an application that periodically checks some rss feeds for new content. Some of these feeds are only reachable via https and some have self signed or somehow broken certificates. I want to be able to check them never the less.</p>
  
  <p>Please note that security is not an issue in this application the goal is to access the content with minimal effort.</p>
  
  <p>I'm using this code to circumvent most of the certificate issues:</p>
  
  <pre><code>/**
       * Sets timeout values and user agent header, and ignores self signed ssl
       * certificates to enable maximum coverage
       * 
       * @param con
       * @return
       */
      public static URLConnection configureConnection(URLConnection con)
      {
          con.setRequestProperty(
              "User-Agent",
              "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
          con.setConnectTimeout(30000);
          con.setReadTimeout(40000);
          if (con instanceof HttpsURLConnection)
          {
              HttpsURLConnection conHttps = (HttpsURLConnection) con;
              TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager()
              {
  
                  public java.security.cert.X509Certificate[] getAcceptedIssuers()
                  {
                      return null;
                  }
  
                  public void checkClientTrusted(
                      java.security.cert.X509Certificate[] certs, String authType)
                  {
                  }
  
                  public void checkServerTrusted(
                      java.security.cert.X509Certificate[] certs, String authType)
                  {
                  }
              } };
  
              HostnameVerifier allHostsValid = new HostnameVerifier()
              {
                  @Override
                  public boolean verify(String arg0, SSLSession arg1)
                  {
                      return true;
                  }
              };
  
              // Install the all-trusting trust manager
              try
              {
                  SSLContext sc = SSLContext.getInstance("SSL");
                  sc.init(null, trustAllCerts, new java.security.SecureRandom());
                  HttpsURLConnection.setDefaultSSLSocketFactory(sc
                      .getSocketFactory());
                  HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
                  con = conHttps;
              } catch (Exception e)
              {
              }
          }
          return con;
      }
  </code></pre>
  
  <p>this works for most of the sites, but on one I still get this exception:</p>
  
  <pre><code>javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification pat
  h to requested target
          at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
          at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1715)
          at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:257)
          at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:251)
          at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1168)
          at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153)
          at sun.security.ssl.Handshaker.processLoop(Handshaker.java:609)
          at sun.security.ssl.Handshaker.process_record(Handshaker.java:545)
          at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:963)
          at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1208)
          at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1235)
          at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1219)
          at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:440)
          at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
          at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1139)
          at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:397)
          at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338)
          at crawler.RSSReader.getNewArticles(RSSReader.java:53)
          at crawler.Crawler.fetchFeed(Crawler.java:187)
          at crawler.Crawler.main(Crawler.java:120)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:622)
          at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
  Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
          at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:324)
          at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:224)
          at sun.security.validator.Validator.validate(Validator.java:235)
          at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:147)
          at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:230)
          at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:270)
          at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1147)
          ... 20 more
  Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
          at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:197)
          at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:255)
          at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:319)
  </code></pre>
  
  <p>Does anyone know how I can resolve this?</p>