On Tue, Feb 11, 2003 at 10:42:33PM -0800, Bill Barker wrote:
> 
> "Alex Tang" <[EMAIL PROTECTED]> wrote in message
> [EMAIL PROTECTED]">news:[EMAIL PROTECTED]...
> > Hi folks.
> >
> > I was wondering if it's possible to get client certificate information
> > from tomcat (3.3.1) when running STANDALONE (e.g. NOT using mod_jk or an
> > external webserver).
> >
> > I can setup tomcat so that it requires client-auth properly, however I
> > don't seem to be able to programmatically get at any of the certificate
> > information.
> >
> 
> This sounds like you've found the clientauth="true" attribute on the
> Http10Connector element.  This causes Tomcat to requre a client cert for
> each SSL request (unlike TC 4.x, it's an all-or-nothing setting).

Hi bill.  Thanks for your response.

Yes, i did find "clientauth='true'".  It does make my tc 3.3.1 instance
require a client-cert for everything.  

> You should then be able to access the top-level cert (all that can be
> exposed under the 2.2 Servlet-spec :() via
> 'request.getAttribute("javax.servlet.request.X509Certificate")'.  As per
> section 5.7 of the 2.2 spec, this will be of type
> java.security.cert.X509Certificate.
> 
> I haven't tried this with the Http10Connector for a very long time (it seems
> to work fine with the 3.3.2-dev CoyoteConnector).  If you are still having
> problems, please report it to http://nagoya.apache.org/bugzilla/.


OK, this is getting more bizarre (well, for me at least).  Orignally, i
was testing using SnoopServlet, and looking the values of "Request
attributes:" (which just iterating over the Enumeration returned from
"request.getAttributeNames()").  

When using apache and mod_jk, i am getting the attributes: 

   javax.servlet.request.cipher_suite 
   javax.servlet.request.X509Certificate
   javax.servlet.request.ssl_session

(Thanks to your reference, I realize that only the X509Certificate
attribute is required by the servlet 2.2 spec.)

When running in tomcat standalone, i get an empty Enumeration returned
from "request.getAttributeNames()".  I thought that the cert information was
not available.  However, if i do 

    request.getAttribute ( "javax.servlet.request.X509Certificate" );

a valid X509Certificate array is returned.  

Why is this attribute not showing up when doing
"request.getAttributeNames()"?  A sample servlet and the response i'm
receiving is included below.

Thanks again.

...alex...


FYI: Here's a test servlet (basically a modified SnoopServlet):

---------------------------------------------------------------------------
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.security.cert.*;

public class TestServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {   
        PrintWriter out = response.getWriter();
        response.setContentType("text/plain");

        out.println("Test Servlet");
        out.println();

        out.println("Dumping Request attributes:");
        Enumeration e = request.getAttributeNames();

        while (e.hasMoreElements()) {
            String key = (String)e.nextElement();
            Object value = request.getAttribute(key);
            out.println("   " + key + " = " + value);
        }


        out.println("END Request attributes:");
        out.println();

        out.println("Dumping request attribute " +
                "javax.servlet.request.X509Certificate" );

        X509Certificate[] certs = (X509Certificate[])request.getAttribute (
                "javax.servlet.request.X509Certificate" );
        if ( certs != null ) {
            for ( int i = 0; i < certs.length; i++ ) {
                out.println ( "  CERT " + i + ": " + 
                        certs[i].getSubjectDN().getName() );
            }
        }
        out.println("END  request attribute " +
                "javax.servlet.request.X509Certificate" );
    }
}
---------------------------------------------------------------------------


When I use tomcat 3.3.1 in standalone, i get the following results:

---------------------------------------------------------------------------
    Test Servlet

    Dumping Request attributes:
    END Request attributes:

    Dumping request attribute javax.servlet.request.X509Certificate
      CERT 0: CN=Alex Tang, OU=People, O=Funkware, C=US
    END  request attribute javax.servlet.request.X509Certificate
---------------------------------------------------------------------------

And for comparison, when i use apache and mod_jk, i get the following:



---------------------------------------------------------------------------
Test Servlet

Dumping Request attributes:
   javax.servlet.request.cipher_suite = RC4-MD5
   javax.servlet.request.X509Certificate = [Ljava.security.cert.X509Certificate;@203c31
   javax.servlet.request.ssl_session = 
77971778D91F8A7AD58E765BDD7C3C1BD1AA05ADCC5B279BC5C7845F14AAE915
END Request attributes:

Dumping request attribute javax.servlet.request.X509Certificate
  CERT 0: CN=Alex Tang, OU=People, O=Funkware, C=US

---------------------------------------------------------------------------

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to