title: Java SSL communication handshake failure with openjdk 1.8
body: <p>I have a java program that is using RESTTemplate talking to a service. I am using client certificate for communicating with server. Getting following error</p>
  
  <blockquote>
  <pre><code>main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
  19:53:13.851 [main] DEBUG org.apache.http.impl.conn.DefaultManagedHttpClientConnection - http-outgoing-0: Shutdown connection
  19:53:13.852 [main] DEBUG org.apache.http.impl.execchain.MainClientExec - Connection discarded
  19:53:13.852 [main] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Connection released: [id: 0][route: {s}-&gt;https://api.entrust.net:443][total kept alive: 0; route allocated: 0 of 2; total allocated: 0 of 20]
  19:53:13.854 [main] ERROR com.x.y.z.provider.a.Client - exception I/O error on GET request for "https://api.entrust.net/enterprise/v2/application/version": Received fatal alert: handshake_failure; nested exception is javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
  19:53:13.858 [main] DEBUG com.x.y.z.provider.a.Client - Map the failure exception {}
  org.springframework.web.client.ResourceAccessException: I/O error on GET request for "https://api.entrust.net/enterprise/v2/application/version": Received fatal alert: handshake_failure; nested exception is javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
          at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:744)
          at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:670)
  </code></pre>
  </blockquote>
  
  <hr>
  
  <p>When I enable debug logs, I see initial handshake is done but it fails later with following error</p>
  
  <blockquote>
    <p></p>
  </blockquote>
  
  <pre><code>*** CertificateVerify
  Signature Algorithm SHA256withRSA
  update handshake state: certificate_verify[15]
  upcoming handshake states: client change_cipher_spec[-1]
  upcoming handshake states: client finished[20]
  upcoming handshake states: server change_cipher_spec[-1]
  upcoming handshake states: server finished[20]
  main, WRITE: TLSv1.2 Handshake, length = 264
  update handshake state: change_cipher_spec
  upcoming handshake states: client finished[20]
  upcoming handshake states: server change_cipher_spec[-1]
  upcoming handshake states: server finished[20]
  main, WRITE: TLSv1.2 Change Cipher Spec, length = 1
  *** Finished
  verify_data:  { 101, 230, 249, 79, 106, 34, 167, 222, 44, 208, 111, 11 }
  ***
  
  update handshake state: finished[20]
  upcoming handshake states: server change_cipher_spec[-1]
  upcoming handshake states: server finished[20]
  **main, WRITE: TLSv1.2 Handshake, length = 40
  main, READ: TLSv1.2 Alert, length = 2
  main, RECV TLSv1.2 ALERT:  fatal, handshake_failure
  %% Invalidated:  [Session-1, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384]**
  main, called closeSocket()
  </code></pre>
  
  <p>Interestingly I am running it on laptop it works without issues but as soon as I run it on container it gives me handshake error</p>
  
  <p>I am running oracle jdk on laptop but OpenJDK-1.8.0.212 version on my container. What could be possible issues?</p>
  
  <p>In the container I do have truststore and keystore installed and I could see that it is being used since the place where it fails is the one that I showed in SSL debug logs.</p>