SSLSocket: SSLeay for java

Other wrappers exist to provide SSL sockets for java, usually by providing a replacement SocketImpl and SocketImplFactory.

We are trying to avoid that if possible.

Update: 2001

I actually stopped work on this quite a while ago, when it proved impossible to get the socket out of the existing SocketImpl - without getting nasty problems in the native methods. This was all to work around the silly separation of Socket and ServerSocket.

Since then, I've successfully used Sun's JSSE for testing.

SSLrcmd.java

A year or so ago, when the JSSE spec's came out, I wrote SSLrcmd.java as a client for SSLrshd. However, JSSE and the other Java SSL implementations I've looked at did not support the reversed SSL client model used by SSLrshd. I've recently added an option to SSLrsh to support the conventional SSL client roles, and have been able to use SSLrsh.java to run remote commands.

SSLSocket

Our SSLSocket class simply extends Socket - so that we immediately gain any benefits from updates to that class, and simply provides the functions necessary to start SSL and return SSL input and output streams.

The goal, apart from avoiding the replication of any of the standard code, is that an SSLSocket can be used as an ordinary Socket and only becomes magic once SSL has been turned on via SSLconnect() or SSLaccept(). This allows us considerable flexibility.

ServerSocket

We avoided all the hassle of trying to do an SSLServerSocket class (without having to replicate all of PlainSocketImpl) by simply allowing an SSLSocket to be initialized from a Socket which is the return from ServerSocket.accept().

libSSLSocket.so

This is a JNI native library which interfaces SSLSocket.java to Eric Young's SSLeay libraries using some of the code from libsslfd - though greatly simplified at this point.

For maximum portability, we provide the thread locking needed by SSLeay using the JNI's Monitor methods rather than using native mutex's directly.

SSLrcmd

SSLrcmd extends SSLSocket to provide a java implementation of ssl_rcmd(3). Its unit test is a simple implementation of SSLrsh.

The proxy support in ssl_rcmd(3) is not implemented (yet).

Status

A simple unit test, is able to gather the home page from either a HTTP or HTTPS web server, so we know the concept works as expected. There is still a fair bit of work to do though to allow java callbacks from the native code to deal with cert verification failures, prompting for PEM passwords etc.

Bottom line - don't hold your breath :-)


$Id: SSLSocket.html,v 1.3 1998/07/30 13:31:04 sjg Exp $
Copyright © 1997-2001 Crufty.NET