Hello guys,

I'm currently facing an issue with the BaseAuthenticator.
Before opening a issue on the bug tracker, I'd like to get your opinion
guys.

The use case is simple: use an HTTPS tomcat connector with mutual
authentication (CLIENT-CERT).

It does not involve at all any front serveur like Apache HTTPD.

Everything works fine until you want to add the SSLAuthenticator valve with
the preemptive mode.
At the end of the invoke method (AuthenticatorBase), the presence of the
X509 certificate is checked under the usual key (ie.
request.getAttribute(Globals.CERTIFICATES_ATTR)).

This works fine when using an Apache HTTPD front, but does not work with
tomcat SSL connectors cause the request is not populated.

If you check the Authenticate of the SSLAuthenticator that should be invoke
is a certificate is found, if nothing is found in the request under the
usual key, the following is done before trying again

request.getCoyoteRequest().action(ActionCode.REQ_SSL_CERTIFICATE, null);

Roughly and simply speaking, the certificat is going to be extracted from
the coyote request and the entry in the HTTP request is populated.

I'm wondering why it's not done also in the AuthenticatorBase?
It makes it impossible to use the preemptive mode with the SSLAuthenticator
valve.

I think creating a getRequestCertificate() method in the AuthenticatorBase
that wraps up the logic of calling or not the coyote request would do the
trick. Then it's just a matter of using it in the invoke method
(AuthenticatorBase) or in the authenticate (SSLAuthenticator).

Feedback welcome so that I can create a JIRA and submit a patch if you want.

-- 
Jean-Louis

Reply via email to