title: How to access a HTTPS url from a java application
body: <p>I know this is a very basic question, but some how I have managed to not find a solution to this problem. I have a java class that has a main method. In that method, I try to access an https url as below:</p>
  
  <pre><code>package helloworld;
  
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.net.URL;
  
  import javax.net.ssl.HttpsURLConnection;
  
  public class ConnectHttps
  {
  public static void main(String[] argsd)
  {
      System.out.println("***************Https testing started **************");
      try
      {
          URL u = new URL("https://localhost:8443/myapp/test");
          HttpsURLConnection http = (HttpsURLConnection) u.openConnection();
          http.setAllowUserInteraction(true);
          http.setRequestMethod("GET");
          http.connect();
  
          InputStream is = http.getInputStream();
          BufferedReader reader = new BufferedReader(new InputStreamReader(is));
          StringBuilder stringBuilder = new StringBuilder();
          String line = null;
          while ((line = reader.readLine()) != null)
          {
              stringBuilder.append(line
                  + "\n");
          }
          System.out.println(stringBuilder.toString());
          System.out.println("***************Https testing completed **************");
      }
      catch (IOException e)
      {
          System.out.println("***************Https testing failed **************");
          e.printStackTrace();
      }
  }
  
  }
  </code></pre>
  
  <p>On executing this program, the output I get is:</p>
  
  <pre><code>***************Https testing started **************
  ***************Https testing failed **************
  javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching localhost found
  at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
  at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1886)
  at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
  at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
  at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1341)
  at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153)
  at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
  at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
  at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
  at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
  at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
  at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
  at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:515)
  at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
  at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
  at helloworld.ConnectHttps.main(ConnectHttps.java:59)
  </code></pre>
  
  <p>I guess I am doing a very basic mistake here.</p>
  
  <p>I am using JDK 1.7.0_25.</p>