import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;

import java.io.BufferedInputStream;

public class SSLEchoServerTest
{
  
  public static void main(String[] args) 
  {
    try 
    {
      int iBuffers = 0;
      // set key store properties
      System.setProperty("javax.net.ssl.keyStore", "c:/ssl/server.jks");
      System.setProperty("javax.net.ssl.keyStorePassword", "abc@123");
      // activate SSL trace
      System.setProperty("javax.net.debug", "all");
      // create server socket
      SSLServerSocketFactory sslServerSocketFactory = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
      SSLServerSocket        sslServerSocket        = (SSLServerSocket)sslServerSocketFactory.createServerSocket(443);
      // set desired TLS version
      sslServerSocket.setEnabledProtocols( new String[] { "TLSv1" } );
      // wait for requests
      System.out.println("===============================> SSLEchoServerTest.main: waiting for connection");
      SSLSocket sslSocket = (SSLSocket)sslServerSocket.accept();
      // get input stream
      BufferedInputStream bis = new BufferedInputStream(sslSocket.getInputStream());
      // loop to read data
      while (true)
      {
        // end of buffer reached
        if (0x000000ff == bis.read())
        {
          // yes => increment counter
          if (2 == ++iBuffers)
            // 2 buffers => terminate
            break;
        } // if
      } // while
      // close
      bis.close();
      sslServerSocket.close();
    } // try
    catch (Exception e) 
    {
      e.printStackTrace();
    } // catch
    System.exit(0);
  } // main
} // class SSLEchoServer
