I am trying to create a https connection and its working fine in a test class.but when i call the same method in action class its getting following error after step 666666666666.
java.net.SocketException
at javax.net.ssl.DefaultSSLSocketFactory.createSocket(SSLSocketFactory.java:8)
at com.ibm.net.ssl.www2.protocol.https.b.afterConnect(b.java:29)
at com.ibm.net.ssl.www2.protocol.https.c.connect(c.java:34)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:943)
at com.ibm.net.ssl.www2.protocol.https.a.getInputStream(a.java:13)
the method is following.
public static String logOn(String reqXML){
String responseXml="";
try {
JConfigUtil configuratorTest = JConfigUtil.getInstance();
String LogOn_URL = configuratorTest.getProperty(CenturionConst.Centurion,CenturionConst.LogOnService_URL);
// System.out.println("Log On URL :"+LogOn_URL);
String param = URLEncoder.encode(reqXML,"UTF8");
String inputUrl=LogOn_URL+param;
System.out.println("11111111111111111");
System.setProperty("javax.net.ssl.trustStore", CERT_FILE_LOC);
System.out.println("22222222222222222");
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
System.out.println("Warning: URL Host: "+urlHostName+" vs. "+session.getPeerHost());
return true;
}
};
System.out.println("33333333333333333");
HttpsURLConnection.setDefaultHostnameVerifier(hv);
System.out.println("444444444444444444");
System.out.println(inputUrl);
URL url = new URL(inputUrl);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
System.out.println("555555555555555555");
connection.setDoOutput(true);
System.out.println("6666666666666666666");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
System.out.println("77777777777777777777");
while ((line = in.readLine()) != null) {
responseXml=responseXml+line;
}
in.close();
System.out.println("8888888888888888888888");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return responseXml;
}
call trustAllHttpsCertificates() before
HostnameVerifier hv = new HostnameVerifier() and it ll work
package com.americanexpress.mobl.centurion.app.util;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
public class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager{
public static void trustAllHttpsCertificates() throws Exception{
javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
javax.net.ssl.TrustManager tm = new miTM();
trustAllCerts[0] = tm;
javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance(“SSL”);
sc.init(null, trustAllCerts, null);
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
}