javax.net.ssl.SSLHandshakeException:
843811Oct 6 2008 — edited Oct 10 2008i have a server certificate, using it i wrote a java program and load it in the truststore using System.setProperty and it worked fine.
But when i use the follwoing code,
HostnameVerifier hv=new HostnameVerifier() {
// This is default implemenation dont delete this.
public boolean verify(String urlHostname, String certHostname) {
System.out.println("WARNING: Hostname is not matched for cert.");
return true;
}
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
};
Security.addProvider( new com.sun.net.ssl.internal.ssl.Provider() );
HttpsURLConnection.setDefaultHostnameVerifier(hv);
String cerificateLoc = emsProps.get("CERTIFICATE").toString();
String cerificatePass = emsProps.get("CERTIFICATE_PASS").toString();
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(cerificateLoc),cerificatePass.toCharArray());
kmf.init(ks, cerificatePass.toCharArray());
KeyStore ts = KeyStore.getInstance("JKS");
ts.load(new FileInputStream(cerificateLoc),cerificatePass.toCharArray());
//Instantiate a TrustManagerFactory object and initialize it with your truststore:
tmf.init(ts);
SSLContext sslContext = SSLContext.getInstance("SSL");
KeyManager[] managers=kmf.getKeyManagers();
sslContext.init(null, tmf.getTrustManagers(), null);
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
URL normalUrl;
normalUrl = new URL(url);
System.out.println("Normal Url in Webservice Utility class doSSLInitialize");
HttpsURLConnection urlc = (HttpsURLConnection) normalUrl.openConnection();
System.out.println("After normalUrl.openConnection() doSSLInitialize");
urlc.setSSLSocketFactory(sslSocketFactory);
i am getting following exception
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:150)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1476)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:174)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:168)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:847)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:106)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:495)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:433)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:815)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1025)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1038)
at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:186)
at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)
at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
Please do help me to solve this since it is an urgent issue.