2011/01/06

A Concrete Example for SSL in Java

SSLServer:
// keytool -genkeypair -keystore key -keyalg RSA

import java.net.ServerSocket;
import java.net.Socket;
import javax.net.ServerSocketFactory;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class SSLServer
{
    public static void main(String[] args)
    {
        try {
            System.setProperty("javax.net.ssl.keyStore", "key");
            System.setProperty("javax.net.ssl.keyStorePassword", "abcd1234");

            ServerSocketFactory ssl_server_socket_factory =
                    SSLServerSocketFactory.getDefault();
            ServerSocket server =
                    ssl_server_socket_factory.createServerSocket(5566);
            Socket client = server.accept();

            InputStream input_stream = client.getInputStream();
            InputStreamReader reader = new InputStreamReader(input_stream);
            BufferedReader buffered_reader = new BufferedReader(reader);

            while (true) {
                String msg = buffered_reader.readLine();

                if (!(null == msg)) {
                    System.out.println(msg);
                } else {
                    break;
                }
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}



SSLClient:
// use the same key as Server

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import javax.net.SocketFactory;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;

public class SSLClient
{
    public static void main(String[] args)
    {
        try {
            System.setProperty("javax.net.ssl.trustStore", "key");
            System.setProperty("javax.net.ssl.trustStorePassword", "abcd1234");

            SocketFactory ssl_socket_factory = SSLSocketFactory.getDefault();
            Socket server = ssl_socket_factory.createSocket("localhost",
                    5566);

            InputStream input_stream = System.in;
            InputStreamReader reader = new InputStreamReader(input_stream);
            BufferedReader buffered_reader = new BufferedReader(reader);

            OutputStream output_stream = server.getOutputStream();
            OutputStreamWriter writer = new OutputStreamWriter(output_stream);
            BufferedWriter buffered_writer = new BufferedWriter(writer);

            while (true) {
                String msg = buffered_reader.readLine();

                if (!(null == msg)) {
                    buffered_writer.write(msg + '\n');
                    buffered_writer.flush();
                } else {
                    break;
                }
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}