title: java https networking issue
body: <p>I'm trying to implement simplest HTTPS communication program. There are a lot of examples on the web, but I fail to run them successfully.<br>
  Here is one example: <br></p>
  
  <pre><code>public class ReadHttpsURL1 {
     static final int HTTPS_PORT = 443; 
  
     public static void main(String argv[]) throws Exception {
         String url = "www.sun.com";
         System.setProperty("java.net.useSystemProxies", "true");
  
        SocketFactory factory = SSLSocketFactory.getDefault(); 
  
        Socket socket = factory.createSocket(url, HTTPS_PORT); 
  
        BufferedWriter out = new BufferedWriter(new 
              OutputStreamWriter(socket.getOutputStream()));
        BufferedReader in = new BufferedReader(
          new InputStreamReader(socket.getInputStream()));
        out.write("GET / HTTP/1.0\n\n");
        out.flush();
  
        String line;
        StringBuffer sb = new StringBuffer();
        while((line = in.readLine()) != null) {
           sb.append(line);
        }
        out.close();
        in.close();
        System.out.println(sb.toString());
     }
  }
  </code></pre>
  
  <p>It hangs up for a time about a minute (I believe due to server-side timeout) and fail with error. Hangs up on</p>
  
  <pre><code>Socket socket = factory.createSocket(url, HTTPS_PORT); 
  </code></pre>
  
  <p>Error is</p>
  
  <pre><code>Exception in thread "main" java.net.SocketException: Connection reset
      at java.net.SocketInputStream.read(Unknown Source)
      at java.net.SocksSocketImpl.readSocksReply(Unknown Source)
      at java.net.SocksSocketImpl.connect(Unknown Source)
      at java.net.Socket.connect(Unknown Source)
      at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source)
      at com.sun.net.ssl.internal.ssl.SSLSocketImpl.&lt;init&gt;(Unknown Source)
      at com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl.createSocket(Unknown Source)
      at com.sun.ex1.ReadHttpsURL1.main(ReadHttpsURL1.java:20)
  </code></pre>
  
  <p>Here is second example:</p>
  
  <pre><code>public class HttpsTest {
  
      public static void main(String[] args) throws MalformedURLException, IOException {
          System.setProperty("java.net.useSystemProxies", "true");
  
          URL url = new URL("https://www.sun.com");
          URLConnection con = url.openConnection();
          con.setAllowUserInteraction(true);
          InputStream is = new BufferedInputStream(con.getInputStream());
          for (int b = is.read(); b &gt;= 0; b = is.read()) {
              System.out.write(b);
          }
      }
  }
  </code></pre>
  
  <p>Just throw this exception:</p>
  
  <pre><code>Exception in thread "main" javax.net.ssl.SSLKeyException: RSA premaster secret error
      at com.sun.net.ssl.internal.ssl.RSAClientKeyExchange.&lt;init&gt;(Unknown Source)
      at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHelloDone(Unknown Source)
      at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source)
      at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source)
      at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Unknown Source)
      at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
      at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
      at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
      at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
      at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
      at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
      at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
      at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
      at HttpsTest.main(HttpsTest.java:16)
  Caused by: java.security.NoSuchAlgorithmException: SunTlsRsaPremasterSecret KeyGenerator not available
      at javax.crypto.KeyGenerator.&lt;init&gt;(DashoA13*..)
      at javax.crypto.KeyGenerator.getInstance(DashoA13*..)
      at com.sun.net.ssl.internal.ssl.JsseJce.getKeyGenerator(Unknown Source)
      ... 14 more
  </code></pre>
  
  <p>I've read a bit about <a href="http://docs.oracle.com/javase/7/docs/api/java/security/NoSuchAlgorithmException.html" rel="nofollow">NoSuchAlgorithmException</a>. This seems to be related with sunjce_provider.jar<br>
  I've tried different variants to include this file in the classpath and even make application dependency to this jar (jar was present in classpath for sure)<br></p>
  
  <p>HTTPS URL is live URL. Proxy settings are working (it throws a different connection exception otherwise).<br>
  java version "1.6.0_23"<br></p>
  
  <p>Are these errors related?<br>
  Any ideas how to fix?<br>
  Thanks for help!</p>