/** * 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.SSLServerSocket; import javax.net.ssl.SSLServerSocketFactory; import javax.net.ssl.TrustManagerFactory; class SecureTCPServer { public static void main(String argv[]) throws Exception { String clientSentence; String capitalizedSentence; KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); FileInputStream in = new FileInputStream("keystores/server.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")); SSLServerSocketFactory sslSrvFact = sslcon.getServerSocketFactory(); SSLServerSocket welcomeSocket = (SSLServerSocket)sslSrvFact.createServerSocket(6789); welcomeSocket.setNeedClientAuth(true); while(true) { SSLSocket connectionSocket = (SSLSocket)welcomeSocket.accept(); BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n'; outToClient.writeBytes(capitalizedSentence); } } }