1. Use the OpenSSL commands to create a CA root certificate, a server certificate, and two or more client certificates. (15 points) 2. Write a client-server package for file transfer. The server will listen on some network port. When it accepts a connection, it immediately starts up SSL. The server verifies that the client's certificate came from the proper CA; that's the authentication used. The first line of input -- above the SSL level -- should be 'r' or 'w' and a file name. This must be relative to a per-client directory. No client should be able to to read or write anything outside its directory tree, but subdirectories are allowed underneath it. Everything after the newline is input data (for 'w'). The server replies to the initial command with a status line -- 'ok' if things look good; an error message otherwise. If the command was 'r', the status line is followed by the file. It is up to you how to determine the per-client directory. There are two obvious choices: have a server-side database of clients, or put the actual directory name into the certificate you generated earlier. Remember -- since the CA (a trusted party) signed the certificate, data in it can be presumed correct and authentic. Make sure you check all inputs properly! When you build the tar file, have separate subdirectories for the client, the server, and the data (i.e., the certificates). Each of the client and server directories should have its own Makefile with the targets described in the general instructions. Helpful web sites: http://www.ibm.com/developerworks/linux/library/l-openssl.html http://www.rtfm.com/openssl-examples/ http://sandbox.rulemaker.net/ngps/m2/howto.ca.html Java users should see http://java.sun.com/products/jsse/index-14.html; C users should start with http://www.openssl.org and the man pages on the CLIC machines. One link there points back to here, it turns out: http://www.columbia.edu/~ariel/ssleay/ http://www.stunnel.org