Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Exception when printing the server certificate details

i have set up a https connection between the server and the client, where the client is a java program and the server is a servlet. I have used the following code to print the certificate details from the server.

URL url = new URL("https://localhost:8443/cert");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(sslsocketfactory);

connection.setDoOutput(true);
if(connection!=null){
    Certificate[] certs = connection.getServerCertificates();// #1 

    System.out.println("Cert Type : " + certs[0].getType());
    System.out.println("Cert Hash Code : " + certs[0].hashCode());
    System.out.println("Cert Public Key Algorithm : " + certs[0].getPublicKey().getAlgorithm());
    System.out.println("Cert Public Key Format : " + certs[0].getPublicKey().getFormat());
    System.out.println("\n");
}

But I am getting the following exception.

java.lang.IllegalStateException: connection not yet open

I thought handshake should take place as soon as theurl.openconnection() method in called. What is the problem here?
The Exception is thrown line number '#1'(see comments in the code above)

like image 750
Ashwin Avatar asked Mar 05 '12 14:03

Ashwin


1 Answers

you're trying to connect to a self signed certificate host. Follow the instructions for Option 2 of the answer from this answer, which should allow you connect.

I replaced the connection.setDoOutput() with a connection.connect() and the code worked correctly for me.

Do not use this mechanism for anything other than testing - you should be using a validly signed certificate

like image 85
Petesh Avatar answered Oct 09 '22 23:10

Petesh