sunlabs.brazil.ssl
Class SslHandler

java.lang.Object
  |
  +--sunlabs.brazil.ssl.SslHandler
All Implemented Interfaces:
Handler, iaik.security.ssl.ServerTrustDecider, iaik.security.ssl.TrustDecider

public class SslHandler
extends Object
implements Handler, iaik.security.ssl.ServerTrustDecider

Handler for installing SSL into the server. the server's listen socket is replaced with a socket that implements SSL, using the implementation from Iaik.

The server requests a certificate from the user, and if provided, incorporates the user's certificate information into request.props.

Properties:

certDir
The absolute pathname of the directory containing the server's certificates. The "main" in this class should generate a representitive sample (but doesn't). In the mean time, you can run "java CreateCertificates" with the Iaik jar in your path, to create a set of server test certificates in the certs directory.
certRequired
If set, the server will ask the user for a client cert.
issuer.*
Information about the certificate issuer.
owner.*
Information about the certificate owner.
fingerprint.*
The base64 encoded fingerprints of the clients certificates
session
The property to put the certificate serial number into. Defaults to "cert.id".

NOTE: portions of this code were adapted from from the IAIK examples, used with permission.


Constructor Summary
SslHandler()
           
 
Method Summary
 boolean init(Server server, String prefix)
          Initializes the handler.
 boolean isTrustedPeer(iaik.security.ssl.SSLCertificate cert)
           
 boolean respond(Request request)
          Extract client and issuer certificate information.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SslHandler

public SslHandler()
Method Detail

isTrustedPeer

public boolean isTrustedPeer(iaik.security.ssl.SSLCertificate cert)
Specified by:
isTrustedPeer in interface iaik.security.ssl.TrustDecider

init

public boolean init(Server server,
                    String prefix)
Description copied from interface: Handler
Initializes the handler.

Specified by:
init in interface Handler
Parameters:
server - The HTTP server that created this Handler. Typical Handlers will use Server.props to obtain run-time configuration information.
prefix - The handlers name. The string this Handler may prepend to all of the keys that it uses to extract configuration information from Server.props. This is set (by the Server and ChainHandler) to help avoid configuration parameter namespace collisions.
Returns:
true if this Handler initialized successfully, false otherwise. If false is returned, this Handler should not be used.

respond

public boolean respond(Request request)
                throws IOException
Extract client and issuer certificate information. Insert intro request properties.

Specified by:
respond in interface Handler
Parameters:
request - The Request object that represents the HTTP request.
Returns:
true if the request was handled. A request was handled if a response was supplied to the client, typically by calling Request.sendResponse() or Request.sendError.
Throws:
IOException - if there was an I/O error while sending the response to the client. Typically, in that case, the Server will (try to) send an error message to the client and then close the client's connection.

The IOException should not be used to silently ignore problems such as being unable to access some server-side resource (for example getting a FileNotFoundException due to not being able to open a file). In that case, the Handler's duty is to turn that IOException into a HTTP response indicating, in this case, that a file could not be found.


Version 2.1, Generated 12/30/04
Copyright (c) 2001-2004, Sun Microsystems.