/** * Code is adapted from Computer Networking: A Top-Down Approach Featuring * the Internet, second edition, copyright 1996-2002 J.F Kurose and K.W. Ross, * All Rights Reserved. **/ import java.io.*; import java.net.*; import java.security.KeyStore; import java.security.SecureRandom; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManagerFactory; class SecureTCPClient { public static void main(String argv[]) throws Exception { String sentence; String modifiedSentence; KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); FileInputStream in = new FileInputStream("keystores/client.ks"); keystore.load(in, "passwd".toCharArray()); in.close(); KeyManagerFactory keyfact = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); keyfact.init(keystore, "passwd".toCharArray()); TrustManagerFactory trustfact = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustfact.init(keystore); SSLContext sslcon = SSLContext.getInstance("TLSv1"); sslcon.init(keyfact.getKeyManagers(), trustfact.getTrustManagers(), SecureRandom.getInstance("SHA1PRNG")); SSLSocketFactory sslFact = sslcon.getSocketFactory(); SSLSocket clientSocket = (SSLSocket)sslFact.createSocket("localhost", 6789); BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); outToServer.writeBytes(sentence + '\n'); modifiedSentence = inFromServer.readLine(); System.out.println("FROM SERVER: " + modifiedSentence); clientSocket.close(); } }