Note that there are some explanatory texts on larger screens.

plurals
  1. POJava https having problems with handshaking
    primarykey
    data
    text
    <p>I am in the process of writing an https server in java that will accept and respond to ajax requests. I have this all working with http connections, but https is proving difficult to set up. If I use openssl I can hit the server and get a response as expected: <code>openssl s_client -connect localhost:5001</code> But ajax calls from the browser fail. I'm not sure where to go from here.</p> <p><strong>This is the stacktrace from the server after an attemped ajax call:</strong></p> <pre><code>javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) at sun.security.ssl.SSLSocketImpl.writeRecord(Unknown Source) at sun.security.ssl.AppOutputStream.write(Unknown Source) at sun.nio.cs.StreamEncoder.writeBytes(Unknown Source) at sun.nio.cs.StreamEncoder.implFlushBuffer(Unknown Source) at sun.nio.cs.StreamEncoder.implFlush(Unknown Source) at sun.nio.cs.StreamEncoder.flush(Unknown Source) at java.io.OutputStreamWriter.flush(Unknown Source) at java.io.BufferedWriter.flush(Unknown Source) at com.myDomain.HttpsServer.main(HttpsServer.java:223) Caused by: java.io.EOFException: SSL peer shut down incorrectly at sun.security.ssl.InputRecord.read(Unknown Source) ... 11 more </code></pre> <p><strong>The ajax call:</strong></p> <pre><code>var command, req; command = { command: "getStatus", }; command = JSON.stringify(command); req = $.ajax("https://localhost:5001", { data: command, dataType: "jsonp", timeout: 1000 }); </code></pre> <p><strong>The Java Server:</strong></p> <pre><code>private static SSLServerSocket createSSLSocket(){ SSLServerSocketFactory sslServerSocketFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); try{ SSLServerSocket sslSocket = (SSLServerSocket) sslServerSocketFactory.createServerSocket(port, 10, InetAddress.getByName("127.0.0.1")); return sslSocket; } catch (Exception e){ e.printStackTrace(); } return null; } public static void main (String args[]) throws Exception { SSLServerSocket sslSocket; sslSocket = createSSLSocket(); while(running) { SSLSocket connected = (SSLSocket) sslSocket.accept(); try{ BufferedWriter w = new BufferedWriter( new outputStreamWriter(connected.getOutputStream())); BufferedReader r = new BufferedReader( new InputStreamReader(connected.getInputStream())); w.write("HTTP/1.0 200 OK"); w.write("foo"); w.newLine(); w.flush(); //THIS IS WHERE THE ACTUAL EXCEPTION IS THROWN (LINE 223) w.close(); r.close(); connected.close(); } catch (Exception e){ e.printStackTrace(); } } } </code></pre> <p>This is being run with:</p> <pre><code>java -Djavax.net.ssl.keyStore=mySrvKeystore -Djavax.net.ssl.keyStorePassword=123456 myApp </code></pre> <p>And it looks like mySrvKeystore is being used properly when that is done with the debug option.</p> <p><strong>UPDATE</strong></p> <p>Here is some more information from debug output:</p> <pre><code>*** ECDH ServerKeyExchange Server key: Sun EC public key, 256 bits public x coord: 59120686551233854673577061225846672012454441193286172303206804252170042475984 public y coord: 64356797475544123011351526783519675095229374542555548418334080869325161950574 parameters: secp256r1 [NIST P-256, X9.62 prime256v1] (1.2.840.10045.3.1.7) *** ServerHelloDone main, WRITE: TLSv1 Handshake, length = 1317 main, received EOFException: error main, handling exception: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake %% Invalidated: [Session-1, TLS_ECDHE_RSA_WITH_RC4_128_SHA] main, SEND TLSv1 ALERT: fatal, description = handshake_failure main, WRITE: TLSv1 Alert, length = 2 main, called closeSocket() </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload