Following code snippet is to get JSon
response from a HTTP
URL:
private static void getJson(String location) {
try {
try {
createSSLSocket();
URL url = new URL(
"https://abc.com/key/one");
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
System.out.println(output);
}
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
But it is throwing SSLHandshaking
exception because i didn't added self signed certification exception to the code. I have done this in C#
but not in java. What steps should i perform? Need your suggestion :)
Thanks in advance.
To add trust for a self signed certificate, you can create a
truststore
java keystore file and set thejavax.net.ssl.trustStore
property to point at this file. TheopenConnection
method will check the truststore to see if the certificate can be trusted.To create a truststore file you can use the
keytool
command which is part of the JDK and should be in yourJAVA_HOME/bin
directory.The command will prompt you for a password which you will need if you want to edit the truststore. After entering the password it will create a
truststore.jks
file. To programmatically set the truststore in Java you can either pass it as a property with-Djavax.net.ssl.trustStore=/path/truststore.jks
or you can callSystem.setProperty
To have a look at ssl properties used by Java have a look here.
You can configure the
HttpsURLConnection
socket factory to accept all certificate without any validation:UPDATE
You just have to call this code once at the start of the application. All HTTPS connections opened with
URL.openConnection()
will use this socket factory. Another solution could be adding this code in thecreateSSLSocket()
method body.