Hi,

I built mod_wsgi using Python 3.6.3 and also with Apache 2.2.29.  The 
Apache is configured for client-authenticated SSL, and I am trying to 
configure Apache to pass some of the SSL_ variables to a small test Flask 
application and I am having difficulty getting this working.

Here is the VirtualHost:

<VirtualHost *:8443>
Servername apache.whatever.com
.
.
.


    WSGIDaemonProcess webtool user=myuser group=mygroup threads=5 
home=/apps/flaskapps/helloflask/wsgi-scripts
    WSGIScriptAlias / /apps/flaskapps/helloflask/wsgi-scripts/webtool.wsgi

# From: 
https://stackoverflow.com/questions/20940651/how-to-access-apache-basic-authentication-user-in-flask
#    WSGIPassAuthorization On

    RequestHeader set X-SSL-PROTOCOL "%{SSL_PROTOCOL}s"
    RequestHeader set X-SSL-CIPHER "%{SSL_CIPHER}s"
    RequestHeader set X-SSL-CIPHER1 "%{SSL_CLIENT_S_DN}s"
    RequestHeader set X-SSL-CIPHER2 "%{SSL_CLIENT_I_DN}s"
    RequestHeader set X-SSL-CIPHER3 "%{SSL_CLIENT_CERT}s"
#    RequestHeader set X-SSL-CLIENT_S_DN "%{SSL_CLIENT_S_DN}s"
#    RequestHeader add X-SSL_CLIENT_S_DN "%{SSL_CLIENT_S_DN}e"
#    RequestHeader add X-MYSSL_CLIENT_S_DN 
"fffffooooooooooooooooooooooooooooooooooo"
#     RequestHeader set X-SSL_CLIENT_I_DN "%{SSL_CLIENT_I_DN}e"
#     RequestHeader set X-SSL_SERVER_S_DN_OU "%{SSL_SERVER_S_DN_OU}e"
#     RequestHeader set X-SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}e"
#     RequestHeader set X-SSL_CLIENT_CERT "%{SSL_CLIENT_CERT}e"

    <directory /apps/flaskapps/helloflask/wsgi-scripts>
        WSGIProcessGroup webtool

    SSLOptions +StdEnvVars +ExportCertData

        WSGIApplicationGroup %{GLOBAL}
        WSGIScriptReloading On
        Order allow,deny
        Allow from all
    </directory>

Note the bunch of RequestHeader directives.

I originally started with only the 1st two:

    RequestHeader set X-SSL-PROTOCOL "%{SSL_PROTOCOL}s"
    RequestHeader set X-SSL-CIPHER "%{SSL_CIPHER}s"

And that worked, i.e., my test Flask app was able to see those headers, and 
dumped out those values.

Then, I added a third one:

    RequestHeader set X-SSL-PROTOCOL "%{SSL_PROTOCOL}s"
    RequestHeader set X-SSL-CIPHER "%{SSL_CIPHER}s"
    RequestHeader set X-SSL-CLIENT_S_DN "%{SSL_CLIENT_S_DN}s"

And bounced the Apache and tested, but I still only saw the first two 
headers :(...

I added the others that you see that are commented out, but still only saw 
the first two headers in Flask.

So, just on a whim, I tried copying the 2nd one, but changing the header 
name slightly.

    RequestHeader set X-SSL-PROTOCOL "%{SSL_PROTOCOL}s"
    RequestHeader set X-SSL-CIPHER "%{SSL_CIPHER}s"
    RequestHeader set X-SSL-CIPHER1 "%{SSL_CLIENT_S_DN}s"

And when I tested, I saw all 3 headers in Flask.

So I tried changing the name of the third header:

    RequestHeader set X-SSL-PROTOCOL "%{SSL_PROTOCOL}s"
    RequestHeader set X-SSL-CIPHER "%{SSL_CIPHER}s"
    RequestHeader set X-SSL-CIPHER1_CLIENT_S_DN "%{SSL_CLIENT_S_DN}s"

And then I saw only the first two headers in Flask.

Change the third header name back to X-SSL-CIPHER1 and tested again, and 
saw 3 headers.

I don't understand why this is happening.  It seems like there is something 
"special" about the header name in the RequestHeader that is preventing the 
Apache sending any other header names?

Any ideas why this might be the case?  I have worked with Apache for 
awhile, and with RequestHeader in the past, and I don't recall anything 
like this.

Thanks,
Jim

-- 
You received this message because you are subscribed to the Google Groups 
"modwsgi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/modwsgi.
For more options, visit https://groups.google.com/d/optout.

Reply via email to