views:

38

answers:

2

Hi All,

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;
}
A: 

What is the text of the SocketException?

EJP
what you mean by text???
AutoMEta
The SocketException comes with a message. It is printed along with the stack trace.
EJP
A: 

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 void checkClientTrusted(X509Certificate[] certs, String authType)
        throws CertificateException {
    // TODO Auto-generated method stub
    return;
}

public void checkServerTrusted(X509Certificate[] certs, String authType)
        throws CertificateException {
    // TODO Auto-generated method stub
    return;
}

public X509Certificate[] getAcceptedIssuers() {
    // TODO Auto-generated method stub
    return null;
} 
public boolean isClientTrusted(java.security.cert.X509Certificate[] certs)
{
    return true;
    }
public boolean isServerTrusted(java.security.cert.X509Certificate[] certs)
{
    return true;
    }

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()); }

}

AutoMEta