title: Java SSL connect, add server cert to keystore programmatically
body: <p>I am connecting an SSL client to my SSL server.
  When the client fails to verify a certificate due to the root not existing in the client's key store, I need the option to add that certificate to the local key store in code and continue.
  There are examples for always accepting all certificates, but I want the user to verify the cert and add it to local key store without leaving the application.</p>
  
  <pre><code>SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
  SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("localhost", 23467);
  try{
      sslsocket.startHandshake();
  } catch (IOException e) {
      //here I want to get the peer's certificate, conditionally add to local key store, then reauthenticate successfully
  }
  </code></pre>
  
  <p>There is a whole lot of stuff about custom SocketFactory, TrustManager, SSLContext, etc and I don't really understand how they all fit together or which would be the shortest path to my goal.</p>