package org.bouncycastle.crypto.tls.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.security.SecureRandom; import org.bouncycastle.crypto.tls.TlsClient; import org.bouncycastle.crypto.tls.TlsClientProtocol; /** * A simple test designed to conduct a TLS handshake with an external TLS server. * <p> * Please refer to GnuTLSSetup.html or OpenSSLSetup.html (under 'docs'), and x509-*.pem files in * this package (under 'src/test/resources') for help configuring an external TLS server. * </p> */ public class TlsClientTest { private static final SecureRandom secureRandom = new SecureRandom(); public static void main(String[] args) throws Exception { InetAddress address = InetAddress.getLocalHost(); int port = 5556; long time1 = System.currentTimeMillis(); MockTlsClient client = new MockTlsClient(null); TlsClientProtocol protocol = openTlsConnection(address, port, client); protocol.close(); long time2 = System.currentTimeMillis(); System.out.println("Elapsed 1: " + (time2 - time1) + "ms"); client = new MockTlsClient(client.getSessionToResume()); protocol = openTlsConnection(address, port, client); long time3 = System.currentTimeMillis(); System.out.println("Elapsed 2: " + (time3 - time2) + "ms"); OutputStream output = protocol.getOutputStream(); output.write("GET / HTTP/1.1\r\n\r\n".getBytes("UTF-8")); output.flush(); InputStream input = protocol.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(input)); String line; while ((line = reader.readLine()) != null) { System.out.println(">>> " + line); } protocol.close(); } static TlsClientProtocol openTlsConnection(InetAddress address, int port, TlsClient client) throws IOException { Socket s = new Socket(address, port); TlsClientProtocol protocol = new TlsClientProtocol(s.getInputStream(), s.getOutputStream(), secureRandom); protocol.connect(client); return protocol; } }