That certainly could be done, but is currently outside of the scope of my requirements. The patch I supplied does, FWIW, provide (optional) access to the SSLSession, from which the host and port can be obtained, but I realize that's not the same as a java.net.InetAddress.

My thoughts along those lines are to request a patch when the feature is needed. I personally do not need it right now, so I'd prefer to take an incremental approach, given the pace thus far.

-Fred

On Mar 9, 2007, at 2:54 PM, Polar Humenn wrote:

I would still supply host/port information in the TLS information, but why not just supply the JSSE artifacts? Is this to stay independent of JSSE? Why?

Fred Dushin wrote:
This is fairly technical, so folks on the list not interested in the nitty-gritty need not pay close attention...

So basically, what you're proposing is to extend the (internally defined) ServerEngine interface, to, say, yield a reference to a JettyListenerFactory:

public interface ServerEngine {
    ...
    JettyListenerFactory getJettyListenerFactory();
    ...
}

and then extend the JettyListenerFactory interface to, say, perform the needed operation:

public interface JettyListenerFactory {
    ...
    TLSSessionInfo getTLSSessionInfo(HttpServletRequest request);
    ...
}

The implementation of the SSLJettyListenerFactory will then implement this operation, but of course it will need none of it's state to do the work -- it should properly be a static operation (and PMD should really be instrumented to flag this), for that reason alone, but of course it can't be, since it's part of an interface implementation:

class SSLJettyListenerFactory ... {
    ...
    public final TLSSessionInfo
    getTSLSessionInfo(final HttpServletRequest request) {
        final HttpConnection httpCon = req.getHttpConnection();
        if (httpCon != null) {
            final Object connection = httpCon.getConnection();
            if (connection == null) {
                return null;
            }
            if (connection instanceof SSLSocket) {
                final SSLSocket socket = (SSLSocket) connection;
                final SSLSession session = socket.getSession();
                Certificate[] certs = null;
                try {
                    certs = session.getPeerCertificates();
                } catch (final SSLPeerUnverifiedException e) {
                    // peer has not been verified
                }
return new TLSSessionInfo(session.getCipherSuite (), session, certs);
            }
        }
        return null;
    }
}

And the code in the Destination then reads:

final TLSSessionInfo sessionInfo = engine.getJettyListenerFactory().getTSLSessionInfo(req);
            if (sessionInfo != null) {
                inMessage.put(TLSSessionInfo.class, sessionInfo);
            }

Is the only reason to go through all of this just to avoid references to JSSE types in the Destination?

The same strategy is not available to the ServletController, BTW, so that will need some JSSE specific code in it. And of course in the http2 code, it looks like the old mortbay httpRequest is now a HttpServletRequest, in which case the common code for accessing the TLSSession should properly be in the base AbstractHTTPDestination type. I realize http2 is in flux right now, but is it not to be the new http implementation, or are we planning on having 2 http transport implementations for the forseeable future?

-Fred


Well the only SSL visibility in the org.cxf.transport.http code is
simply to retrieve the configured SSL{Client|Server}Policy so as to pass these on to the org.cxf.transport.https code, which then interprets and
applies the SSL policies.

As far as the org.cxf.transport.http code is concerned, the
SSL{Client|Server}Policy types are completely opaque, and the only
reason these are even visible in this code was a side-effect of how the http-conf schema was defined (i.e. including references to types defined
in the security schema).

So I would like to maintain this separation between the http and https
code.

Cheers,
Eoghan


Thanks,
-Fred

On Mar 9, 2007, at 5:37 AM, Fred Dushin wrote:

A new patch has been uploaded.  Unfortunately, Jira does
not seem to
allow me to remove the old one.

Most of the changes Eoghan suggested have been incorporated.  In
particular

 * Scratched the idea of a ContextInfo type, since no one took the
bait
* Added a TLSessionInfo struct (or the best Java has) to carry TLS
Session data
to the org.apache.cxf.security.transport namespace (API package)
 * Supported in the Jetty and servlet http transports (http
and http2)
   (We gotta fix that!)
 * Refactored Message and Exchange interfaces (and Impls) to now
extend
from a common base type -- not strictly needed, but definitely a
tidy cleanup
   in the API

Patch is off rev 516352.

If someone could quickly review and install the patch, I'd be much
obliged.

I have no ontological commitments to the proposed changes -- mostly
just the idea, so please feel free to morph the proposal to
the idiom
du jour (As long as I can extract the needed information out of the
transport!).

Thanks!
-Fred

Here's a listing of the changes, as seen from my snapshot:

05:20:09 spock:~/src/apache/cxf/cxf-445> svn status
M      rt/transports/http/src/main/java/org/apache/cxf/transport/
http/JettyHTTPDestination.java
M      rt/transports/http/src/main/java/org/apache/cxf/transport/
servlet/ServletController.java
M      rt/transports/http2/src/test/java/org/apache/cxf/transport/
http/JettyHTTPDestinationTest.java
M      rt/transports/http2/src/main/java/org/apache/cxf/transport/
http/JettyHTTPDestination.java
M      rt/transports/http2/src/main/java/org/apache/cxf/transport/
servlet/ServletController.java
M      api/src/main/java/org/apache/cxf/message/Exchange.java
M      api/src/main/java/org/apache/cxf/message/ExchangeImpl.java
M      api/src/main/java/org/apache/cxf/message/Message.java
A      api/src/main/java/org/apache/cxf/message/StringMap.java
M      api/src/main/java/org/apache/cxf/message/MessageImpl.java
A      api/src/main/java/org/apache/cxf/message/StringMapImpl.java
A      api/src/main/java/org/apache/cxf/security
A      api/src/main/java/org/apache/cxf/security/transport
A      api/src/main/java/org/apache/cxf/security/transport/
TLSSessionInfo.java







Reply via email to