title: SSL Java java.io.IOException: Invalid keystore format
body: <p>I am testing SSL in java with SSLServerSocket and other classes in the java.ssl package. When I run the following code, I get the exception java.io.IOException: Invalid keystore format. My code:</p>
  
  <pre><code>package testing;
  import java.io.BufferedReader;
  import java.io.FileInputStream;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.io.PrintWriter;
  import java.net.Socket;
  import java.security.KeyStore;
  
  import javax.net.ServerSocketFactory;
  import javax.net.ssl.KeyManagerFactory;
  import javax.net.ssl.SSLContext;
  import javax.net.ssl.SSLServerSocket;
  import javax.net.ssl.TrustManager;
  
  public class SSLServerTest {
      public static void main(String[] args) {
          try {
              int port = 3000;
              SSLContext sc = SSLContext.getInstance("TLSv1.2");
              KeyStore ks = KeyStore.getInstance("JKS");
              InputStream ksIs = new FileInputStream("key.txt");
              try {
                  ks.load(ksIs, "Bennett556".toCharArray());
              } finally {
                  if (ksIs != null) {
                      ksIs.close();
                  }
              }
              KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
              kmf.init(ks, "Bennett556".toCharArray());
              sc.init(kmf.getKeyManagers(), new TrustManager[] {}, null);
              ServerSocketFactory ssocketFactory = sc.getServerSocketFactory();
              SSLServerSocket ssocket = (SSLServerSocket) ssocketFactory
                      .createServerSocket(port);
              ssocket.setEnabledProtocols(new String[] { "SSLv3" });
              Socket socket = ssocket.accept();
              BufferedReader in = new BufferedReader(new InputStreamReader(
                      socket.getInputStream()));
              PrintWriter out = new PrintWriter(socket.getOutputStream());
              out.println("Hello, Securly!");
              out.close();
              in.close();
              out.close();
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
  }
  </code></pre>
  
  <p>File key.txt:
  1268312345812304612348712634283427346
  I am guessing I should put something else in the key.txt file, but I do not know what to put in it. Probably a searilized object.</p>
  
  <p><strong>EDIT: Client Code:</strong></p>
  
  <pre><code>package testing;
  import java.io.BufferedReader;
  import java.io.FileInputStream;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.security.KeyStore;
  
  import javax.net.SocketFactory;
  import javax.net.ssl.KeyManagerFactory;
  import javax.net.ssl.SSLContext;
  import javax.net.ssl.SSLSocket;
  import javax.net.ssl.TrustManager;
  
  public class SSLClientTest {
      public static void main(String[] args) {
  
          int port = 3000;
          String host = "localhost";
  
          try {
              SSLContext sc = SSLContext.getInstance("TLSv1.2");
              KeyStore ks = KeyStore.getInstance("JKS");
              InputStream ksIs = new FileInputStream("key.txt");
              try {
                  ks.load(ksIs, "Bennett556".toCharArray());
              } finally {
                  if (ksIs != null) {
                      ksIs.close();
                  }
              }
              KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
              kmf.init(ks, "Bennett556".toCharArray());
              sc.init(kmf.getKeyManagers(), new TrustManager[] {}, null);
              SocketFactory factory = sc.getSocketFactory();
              SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
              socket.startHandshake();
              BufferedReader in = new BufferedReader(new InputStreamReader(
                      socket.getInputStream()));
              String str = "";
              while ((str = in.readLine()) != null)
                  System.out.println(str);
              in.close();
              socket.close();
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
  }
  </code></pre>