diff --git a/etc/SSLSocketClient.java b/etc/SSLSocketClient.java new file mode 100644 index 0000000..de2e1e4 --- /dev/null +++ b/etc/SSLSocketClient.java @@ -0,0 +1,87 @@ +import java.net.*; +import java.io.*; +import javax.net.ssl.*; + +/* java SSLSocketClient + * https://docs.oracle.com/javase/10/security/sample-code-illustrating-secure-socket-connection-client-and-server.htm + */ + +/* + * This example demostrates how to use a SSLSocket as client to + * send a HTTP request and get response from an HTTPS server. + * It assumes that the client is not behind a firewall + */ + +public class SSLSocketClient { + + public static void main(String[] args) throws Exception { + String host=args[0]; + + if ( args == null || args.length == 0 || host.trim().isEmpty() ) { + System.out.println("You need to supply a valid hostname"); + } else { + try { + SSLSocketFactory factory = + (SSLSocketFactory)SSLSocketFactory.getDefault(); + SSLSocket socket = + (SSLSocket)factory.createSocket(host, 443); + + /* + * send http request + * + * Before any application data is sent or received, the + * SSL socket will do SSL handshaking first to set up + * the security attributes. + * + * SSL handshaking can be initiated by either flushing data + * down the pipe, or by starting the handshaking by hand. + * + * Handshaking is started manually in this example because + * PrintWriter catches all IOExceptions (including + * SSLExceptions), sets an internal error flag, and then + * returns without rethrowing the exception. + * + * Unfortunately, this means any error messages are lost, + * which caused lots of confusion for others using this + * code. The only way to tell there was an error is to call + * PrintWriter.checkError(). + */ + socket.startHandshake(); + + PrintWriter out = new PrintWriter( + new BufferedWriter( + new OutputStreamWriter( + socket.getOutputStream()))); + + out.println("GET / HTTP/1.1"); + out.println("Host: " + host); + out.println("Connection: close"); + out.println(); + out.flush(); + + /* + * Make sure there were no surprises + */ + if (out.checkError()) + System.out.println( + "SSLSocketClient: java.io.PrintWriter error"); + + /* read response */ + BufferedReader in = new BufferedReader( + new InputStreamReader( + socket.getInputStream())); + + String inputLine; + while ((inputLine = in.readLine()) != null) + System.out.println(inputLine); + + in.close(); + out.close(); + socket.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + } +}