summaryrefslogtreecommitdiffstats
path: root/etc/SSLSocketClient.java
diff options
context:
space:
mode:
Diffstat (limited to 'etc/SSLSocketClient.java')
-rw-r--r--etc/SSLSocketClient.java91
1 files changed, 91 insertions, 0 deletions
diff --git a/etc/SSLSocketClient.java b/etc/SSLSocketClient.java
new file mode 100644
index 0000000..fcbc742
--- /dev/null
+++ b/etc/SSLSocketClient.java
@@ -0,0 +1,91 @@
+import java.net.*;
+import java.io.*;
+import javax.net.ssl.*;
+
+/* java SSLSocketClient taken from
+ * https://docs.oracle.com/javase/10/security/sample-code-illustrating-secure-socket-connection-client-and-server.htm
+ * License: Unknown, not GPLv2
+ */
+
+/*
+ * This example demonstrates 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.
+ * The handshake doesn't include any ALPN protocols. See
+ * https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/alpn.html
+ * for more documentation.
+ */
+
+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();
+ }
+ }
+ }
+}