André,
Thank you for the response, I was able to find the messages to help me find 
what I was looking for. I appreciate the help.

Thank you,
Tim

Timothy F. Gallagher
Senior SAT Engineer
Nuspire Corporation
www.nuspire.com


-----Original Message-----
From: André Warnier [mailto:a...@ice-sa.com] 
Sent: Wednesday, February 06, 2013 12:42 PM
To: mod_perl list
Subject: Re: Question on how execution order of Mod_Persl

Timothy Gallagher wrote:
> Hello all,
> I have a question for you that I am needed some help/guidance on.  I am not 
> sure if this is a question for Apache, perl or mod_perl, I believe this is 
> the correct place to ask.  I am building a reverse proxy server that 
> authenticates a user via the client SSL certificate that is presented to 
> Apache.
> 
> When a person connects to https:// alpha.dev.home.com/ssl, they are requested 
> to present a client SSL cert to the server.  Using Mod_Perl, I then get the 
> client certificate information and do some internal processing to verify the 
> user. If the user is good, I want to then continue the request by acting as a 
> reverse proxy servers for internal apache servers.
> 
> I have all these processes working except not in the correct order.  Here is 
> the order that the items are happening.
> A user will connect to https:// alpha.dev.home.com/ssl. The user is presented 
> with a request for a client certificate.  When the user presents the 
> certificate, they are then allowed access to the backend (private apache web 
> server). At the same time, mod_perl is processing their client SSL 
> certificate.
> 
> Am I able to have the dictate the order of how a request in apache with 
> mod_perl I processed meaning
> 
> 1.       Request comes in
> 
> 2.       Customer needs to present a client SSL certificate
> 
> 3.       Mod_perl takes the client certificate information and processes the 
> information for authentication
> 
> 4.       Depending the outcome of the authentication process, allow the 
> session to continue or drop the connection.
> 
> Here is the code that I am using for testing
> -----[Begin Apache Config]-----
> <VirtualHost alpha.dev.home.com>
>                 # Get the required enviorment
>                 PerlRequire /opt/perlEngine/startup.pl
>                 # SSL Requirements
>                 SSLEngine on
>                 SSLProtocol +SSLv3 +TLSv1
>                 SSLCertificateFile 
> /opt/certs/server/al...@danati.home.com-cert.pem
>                 SSLCertificateKeyFile 
> /opt/certs/server/al...@danati.home.com-key.pem
>                 SSLCACertificateFile 
> /opt/certs/ca/BlackSands-Refereence-CA-cacert.pem
>                 SSLVerifyClient require
>                 SSLOptions +StdEnvVars +ExportCertData +FakeBasicAuth
> 
>                 <Location /ssl>
>                                 SetHandler perl-script
>                                 PerlResponseHandler MyTest::SSLAuth
>                                 ProxyRequests off
>                                 ProxyPass /ssl http://10.10.10.100
>                                 ProxyPassReverse /ssl http://10.10.10.100
>                 </Location>
> </VirtualHost>
> -----[End Apache Config]-----
> 
> 
> -----[Begin MyTest::SSLAuth ]-----
> 
> package MyTest::SSLAuth;
> #use Apache2::ModSSL;
> use Apache2::RequestRec ();
> use Apache2::RequestIO ();
> use Digest::SHA qw(sha256_hex);
> use Apache2::Const -compile => qw(OK);
> use Data::Dumper;
> 
> sub handler {
>                 my $r = shift;
>                 $r->content_type('text/plain');
>                 my $c=$r->connection;
>                 my $cert = $r->subprocess_env('SSL_CLIENT_CERT');
>                 my $serial = $r->subprocess_env('SSL_CLIENT_M_SERIAL');
>                 my $dn = $r->subprocess_env('SSL_CLIENT_S_DN');
>                 my $sig = $r->subprocess_env('SSL_CLIENT_A_SIG');
>                 if($sig != 89765479){
>                                 ....DoSomthing ......
>                 }
>                 return Apache::OK;
> }
> 1;
> -----[End MyTest::SSLAuth ]-----
> 
> 
Hi.
I believe that you may have the same kind of issue that I was having back in 
December 2012.
Check the archives of this list, for a thread entitled "setHandler question".
Doing authentication and then proxying is a bit tricky.
The good news is that it works in the end, so your scheme is possible.

Reply via email to