Received fatal alert: handshake_failure when making request from java6 and targeted java is version8

Harinath T November 23, 2017

I am facing a problem with java compatibility, here is the detail about the SSL handshake:

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1839)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1019)

--------------------------------------------------------------------

Here I am able to make a request with java 8 but not with java 6.

I need a solution to make this request with java 6 version because my client application is with java 6 version, here java8 up-gradation is not possible for time being.

My code is:

package ziraPOC;
import java.io.*;
import java.net.*;

public class JiraCreateIssue {

public static void main(String[] args) {
try {
URL jiraREST_URL = new URL("https://my-jira.com/rest/api/2/issue/");
String myvar = "{"
+ " \"fields\": {"
+ " \"project\":"
+ " { "
+ " \"key\": \"RMP\""
+ " },"
+ " \"summary\": \"REST ye merry gentlemen.\","
+ " \"description\": \"Creating of an issue using project keys and issue type names using the REST API\","
+ " \"issuetype\": {"
+ " \"name\": \"RM Deal Ticket\"" + " }"
+ " }" + "}";

HttpURLConnection conn = (HttpURLConnection) jiraREST_URL.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
String encodedData = myvar;
conn.setRequestMethod("POST");
conn.setRequestProperty("Authorization", "Basic xxxxxxxxxxxxxxxxxxxxxxx=");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Content-Length", String.valueOf(encodedData.length()));
conn.getOutputStream().write(encodedData.getBytes());

System.out.println(conn.getResponseCode()+" response code");

BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String outputJson="";
String output;
while ((output = in.readLine()) != null) {
outputJson=outputJson+output;
}
System.out.println("Response: "+outputJson);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}
}

 

Can any one help me on this, I am trying to resolve this issue from long time. 

1 comment

Nic Brough -Adaptavist-
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
November 24, 2017

I suspect your Java 6 application is trying to use SSL protocols that Java 8 does not support.  Java 8 (and 7) dropped support for protocols that are broken.

You should read more of the error you got, because it should tell you what the error is, and I'd expect it to say protocols.  If it doesn't tell you, then increase the ssl logging to see if you can get more out of the error message.

Assuming it is protocols, then:

  • You could try the flags that re-enable the protocols in Java 8, but there's no saying that applications will accept that and also support them (good ones won't, because you should not use broken protocols)
  • A better option is to disable the protocols in Java 6.
  • The correct option is to move to a more secure version of Java ("Upgrade is not possible for now" is the wrong attitude).

Comment

Log in or Sign up to comment
TAGS
AUG Leaders

Atlassian Community Events