aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/tls/test/HTTPSServerThread.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/tls/test/HTTPSServerThread.java')
-rw-r--r--libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/tls/test/HTTPSServerThread.java113
1 files changed, 113 insertions, 0 deletions
diff --git a/libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/tls/test/HTTPSServerThread.java b/libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/tls/test/HTTPSServerThread.java
new file mode 100644
index 000000000..07eb86e01
--- /dev/null
+++ b/libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/tls/test/HTTPSServerThread.java
@@ -0,0 +1,113 @@
+package org.spongycastle.crypto.tls.test;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.security.KeyStore;
+
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLServerSocket;
+import javax.net.ssl.SSLServerSocketFactory;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSocket;
+import javax.net.ssl.TrustManagerFactory;
+
+public class HTTPSServerThread
+ extends Thread
+{
+ private static final int PORT_NO = 8003;
+ private static final char[] SERVER_PASSWORD = "serverPassword".toCharArray();
+ private static final char[] TRUST_STORE_PASSWORD = "trustPassword".toCharArray();
+
+ /**
+ * Read a HTTP request
+ */
+ private void readRequest(
+ InputStream in)
+ throws IOException
+ {
+ int ch = 0;
+ int lastCh = 0;
+ while ((ch = in.read()) >= 0 && (ch != '\n' && lastCh != '\n'))
+ {
+ if (ch != '\r')
+ {
+ lastCh = ch;
+ }
+ }
+ }
+
+ /**
+ * Send a response
+ */
+ private void sendResponse(
+ OutputStream out)
+ {
+ PrintWriter pWrt = new PrintWriter(new OutputStreamWriter(out));
+ pWrt.print("HTTP/1.1 200 OK\r\n");
+ pWrt.print("Content-Type: text/html\r\n");
+ pWrt.print("\r\n");
+ pWrt.print("<html>\r\n");
+ pWrt.print("<body>\r\n");
+ pWrt.print("Hello World!\r\n");
+ pWrt.print("</body>\r\n");
+ pWrt.print("</html>\r\n");
+ pWrt.flush();
+ }
+
+ SSLContext createSSLContext()
+ throws Exception
+ {
+ KeyManagerFactory mgrFact = KeyManagerFactory.getInstance("SunX509");
+ KeyStore serverStore = KeyStore.getInstance("JKS");
+
+ serverStore.load(new ByteArrayInputStream(KeyStores.server), SERVER_PASSWORD);
+
+ mgrFact.init(serverStore, SERVER_PASSWORD);
+
+ // set up a trust manager so we can recognize the server
+ TrustManagerFactory trustFact = TrustManagerFactory.getInstance("SunX509");
+ KeyStore trustStore = KeyStore.getInstance("JKS");
+
+ trustStore.load(new ByteArrayInputStream(KeyStores.trustStore), TRUST_STORE_PASSWORD);
+
+ trustFact.init(trustStore);
+
+ // create a context and set up a socket factory
+ SSLContext sslContext = SSLContext.getInstance("TLS");
+
+ sslContext.init(mgrFact.getKeyManagers(), trustFact.getTrustManagers(), null);
+
+ return sslContext;
+ }
+
+ public void run()
+ {
+ try
+ {
+ SSLContext sslContext = createSSLContext();
+ SSLServerSocketFactory fact = sslContext.getServerSocketFactory();
+
+ SSLServerSocket sSock = (SSLServerSocket)fact.createServerSocket(PORT_NO);
+ SSLSocket sslSock = (SSLSocket)sSock.accept();
+
+ sslSock.startHandshake();
+
+ readRequest(sslSock.getInputStream());
+
+ SSLSession session = sslSock.getSession();
+
+ sendResponse(sslSock.getOutputStream());
+
+ sslSock.close();
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+}