We send what appears to be a V 2 client hello, and the site
loe.lacaixa.es doesn't like it, and closes it's connection
immediately.  Should at least examine it to see why.
If you configure Netscape to use SSL version 2 it works.
If you use Netscape SSL version 3 it works.  But ours it doesn't like.
Brad
From the java-security alias:
Hello,
I'm working with the global version of JSSE 1.0.2 and trying to use the
following code to get a page from a secure server:
import java.net.*;
import java.io.*;
class Test {
    public static void main(String argv[])
        throws java.io.IOException
    {
        String pageLocation = "https://loe.lacaixa.es";
        java.security.Security.addProvider(
                new com.sun.net.ssl.internal.ssl.Provider());  
        java.lang.System.setProperty("java.protocol.handler.pkgs",
                        "com.sun.net.ssl.internal.www.protocol"); 
        URL url = new URL(pageLocation);
        HttpURLConnection connection = (HttpURLConnection)
url.openConnection();
        connection.connect();
        BufferedReader in = new
BufferedReader(new                                                                       
InputStreamReader(connection.getInputStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            System.out.println(inputLine);
        }
        in.close();
    } // end main()
}
The problem is that I get the error message:
Exception in thread "main" java.net.SocketException: Socket closed
But if instead of trying to connect to https://loe.lacaixa.es, I try to
connect to https://www.verisign.com (for example), it works. And I can
use my browser to navigate https://loe.lacaixa.es, without any problem.
I would like to know where's the problem here. Is there something wrong
in my code or is this a bug in the JSSE reference implementation
provided by Sun? Is there any workaround to this problem?
Thanks in advance.
Xavi
Name: krC82822			Date: 05/03/2001
java version "1.2.2"
Classic VM (build JDK-1.2.2_006, native threads, symcjit)
Run the URLReader class to connect to the website https://loe.lacaixa.es which
only expects SSLv3 message. With the system property -Djavax.net.debug=all on,
I got the following info:
[write] MD5 and SHA1 hashes:  len = 59
0000: 01 00 00 37 03 01 3A F0   C3 04 05 3B 7B B0 9E E2  ...7..:....;....
0010: 23 96 7D 32 19 4A 2E BD   A9 8A 5C 60 82 AF B3 15  #..2.J....\`....
0020: 3C BB 4E E2 94 5E 00 00   10 00 05 00 04 00 09 00  <.N..^..........
0030: 0A 00 12 00 13 00 03 00   11 01 00                 ...........
main, WRITE:  SSL v3.1 Handshake, length = 59
[write] MD5 and SHA1 hashes:  len = 77
0000: 01 03 01 00 24 00 00 00   20 00 00 05 00 00 04 01  ....$... .......
0010: 00 80 00 00 09 06 00 40   00 00 0A 07 00 C0 00 00  .......@........
0020: 12 00 00 13 00 00 03 02   00 80 00 00 11 3A F0 C3  .............:..
0030: 04 05 3B 7B B0 9E E2 23   96 7D 32 19 4A 2E BD A9  ..;....#..2.J...
0040: 8A 5C 60 82 AF B3 15 3C   BB 4E E2 94 5E           .\`....<.N..^
main, WRITE:  SSL v2, contentType = 22, translated length = 16310
Exception in thread "main" java.net.SocketException: Socket closed
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a([DashoPro-V1.2-120198])
        at com.sun.net.ssl.internal.ssl.AppOutputStream.write([DashoPro-V1.2-120
198])
        at java.io.OutputStream.write(OutputStream.java, Compiled Code)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake([DashoPro-V
1.2-120198])
        at com.sun.net.ssl.internal.www.protocol.https.HttpsClient.doConnect([Da
shoPro-V1.2-120198])
        at com.sun.net.ssl.internal.www.protocol.https.NetworkClient.openServer(
[DashoPro-V1.2-120198])
        at com.sun.net.ssl.internal.www.protocol.https.HttpClient.l([DashoPro-V1
.2-120198])
        at com.sun.net.ssl.internal.www.protocol.https.HttpClient.<init>([DashoP
ro-V1.2-120198])
        at com.sun.net.ssl.internal.www.protocol.https.HttpsClient.<init>([Dasho
Pro-V1.2-120198])
        at com.sun.net.ssl.internal.www.protocol.https.HttpsClient.a([DashoPro-V
1.2-120198])
        at com.sun.net.ssl.internal.www.protocol.https.HttpsClient.a([DashoPro-V
1.2-120198])
        at com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnection.connec
t([DashoPro-V1.2-120198])
        at com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnection.getInp
utStream([DashoPro-V1.2-120198])
        at URLReader.main(URLReader.java, Compiled Code)
Here is the code for URLReader:
public class URLReader {
    public static void main(String[] args) throws Exception {
      SSLContext ctx = SSLContext.getInstance("SSLv3"); // Same thing happens
for SSL or TLS
      
      KeyStore ks = KeyStore.getInstance("JKS");
      ks.load(new FileInputStream
("c:/jdk1.2.2/jre/lib/security/cacerts"), "changeit".toCharArray());
      
      TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
      tmf.init(ks);
      ctx.init(null, tmf.getTrustManagers(), null);
      SSLSocketFactory sf = ctx.getSocketFactory();
	URL url = new URL(args[0]); // "https://loe.lacaixa.es/");
      HttpsURLConnection con = (HttpsURLConnection)url.openConnection();
      con.setSSLSocketFactory(sf);
      BufferedReader in = new BufferedReader(
			  new InputStreamReader(con.getInputStream()));
      String inputLine;
      while ((inputLine = in.readLine()) != null)
        System.out.println(inputLine);
    
      in.close();
    }
}
(Review ID: 123671)
======================================================================