title: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake during web service communicaiton
body: <p>I am getting <strong>javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake</strong> exception when I try to do HTTPS Post of a web service through internet. But same code works for other internet hosted web services. I tried many things, nothing is helping me. I posted my sample code here. Can anyone please help me to resolve this problem?</p>
  
  <pre><code>public static void main(String[] args) throws Exception {
  
      String xmlServerURL = "https://example.com/soap/WsRouter";
      URL urlXMLServer = new URL(xmlServerURL);
      // URLConnection supports HTTPS protocol only with JDK 1.4+ 
      Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(
              "xxxx.example.com", 8083));
      HttpURLConnection httpsURLConnection = (HttpURLConnection) urlXMLServer
              .openConnection(proxy);
      httpsURLConnection.setRequestProperty("Content-Type","text/xml; charset=utf-8");
      //httpsURLConnection.setDoInput(true);
      httpsURLConnection.setDoOutput(true);
      httpsURLConnection.setConnectTimeout(300000);
      //httpsURLConnection.setIgnoreProxy(false);
      httpsURLConnection.setRequestMethod("POST"); 
      //httpsURLConnection.setHostnameVerifier(DO_NOT_VERIFY); 
      // send request
      PrintWriter out = new PrintWriter(
              httpsURLConnection.getOutputStream());
      StringBuffer requestXML = new StringBuffer();
      requestXML.append(getProcessWorkOrderSOAPXML());   
      // get list of user     
      out.println(requestXML.toString()); 
      out.close();
      out.flush();
      System.out.println("XML Request POSTed to " + xmlServerURL + "\n");
      System.out.println(requestXML.toString() + "\n"); 
      //Thread.sleep(60000);  
      // read response
  
      BufferedReader in = new BufferedReader(new InputStreamReader( 
              httpsURLConnection.getInputStream()));
      String line;
      String respXML = "";
      while ((line = in.readLine()) != null) {
          respXML += line;
      }
      in.close();
  
      // output response
      respXML = URLDecoder.decode(respXML, "UTF-8"); 
      System.out.println("\nXML Response\n");
      System.out.println(respXML);
  }
  </code></pre>
  
  <p>Full stacktrace:</p>
  
  <pre><code>Exception in thread "main" javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
         at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:946)
         at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
         at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
         at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
         at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563)
         at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
         at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1091)
         at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250)
         at com.labcorp.efone.vendor.TestATTConnectivity.main(TestATTConnectivity.java:43)
  Caused by: java.io.EOFException: SSL peer shut down incorrectly
         at sun.security.ssl.InputRecord.read(InputRecord.java:482)
         at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
         ... 8 more
  </code></pre>
  
  <p>Actually, there are two scenarios here. When I work as a standalone Java program I am getting the above exception. But when I try to execute in weblogic application server, I am getting the below exception: Any clue what could be the reason?</p>
  
  <pre><code>java.io.IOException: Connection closed, EOF detected
      at weblogic.socket.JSSEFilterImpl.handleUnwrapResults(JSSEFilterImpl.java:637)
      at weblogic.socket.JSSEFilterImpl.unwrapAndHandleResults(JSSEFilterImpl.java:515)
      at weblogic.socket.JSSEFilterImpl.doHandshake(JSSEFilterImpl.java:96)
      at weblogic.socket.JSSEFilterImpl.doHandshake(JSSEFilterImpl.java:75)
      at weblogic.socket.JSSEFilterImpl.write(JSSEFilterImpl.java:448)
      at weblogic.socket.JSSESocket$JSSEOutputStream.write(JSSESocket.java:93)
      at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
      at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
      at java.io.FilterOutputStream.flush(FilterOutputStream.java:140)
      at weblogic.net.http.HttpURLConnection.writeRequests(HttpURLConnection.java:192)
      at weblogic.net.http.HttpURLConnection.getInputStream(HttpURLConnection.java:433)
      at weblogic.net.http.SOAPHttpsURLConnection.getInputStream(SOAPHttpsURLConnection.java:37)
      at com.labcorp.efone.service.impl.WorkOrderServiceImpl.processATTWorkOrder(ATTWorkOrderServiceImpl.java:86)
      at com.labcorp.efone.bds.WorkOrderBusinessDelegateImpl.processATTWorkOrder(WorkOrderBusinessDelegateImpl.java:59)
      at com.labcorp.efone.actions.ATTWorkOrderAction.efonePerformForward(ATTWorkOrderAction.java:41)
      at com.labcorp.efone.actions.EfoneAction.efonePerformActionForward(EfoneAction.java:149)
      at com.labcorp.efone.actions.EfoneAction.execute(EfoneAction.java:225)
      at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
      at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
      at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
      at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:751)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:844)
      at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280)
      at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254)
      at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136)
      at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:341)
      at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
      at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
      at com.labcorp.efone.security.EfoneAuthenticationFilter.doFilter(EfoneAuthenticationFilter.java:115)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
      at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
      at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
      at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
      at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
      at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
      at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
      at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3367)
      at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3333)
      at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
      at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
      at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
      at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2220)
      at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2146)
      at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2124)
      at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1564)
      at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254)
      at weblogic.work.ExecuteThread.execute(ExecuteThread.java:295)
      at weblogic.work.ExecuteThread.run(ExecuteThread.java:254)
  Exception: java.io.IOException: Connection closed, EOF detected
  </code></pre>