ProxySSL with client certificate - error redirection problem

Igor Sysoev is at rambler-co.ru
Mon Sep 21 23:05:51 MSD 2009


On Mon, Sep 21, 2009 at 08:46:03AM -0400, adileso wrote:

> Hi all,
> 
> I have published an internal web site with HTTPS and set the ssl_verify_client on. I need some fields from the client certificate to send them to the back-end web server, so I can correctly access a specific database.
> 
> It's working but I also need to redirect the client to a second internal website in case his certificate is missing or is invalid.
> I have tried to capture the error page that I've got in the browser (when I don't send a client certificate) and put a redirect link in that error page.  The second website will generate the client certificates based on a user and password. 
> 
> I am trying to avoid to give 2 separate links to the client (one for the client certificate generation and one for database access)
> Any suggestions? I've tried also to do this with apache ssl_error_module with no luck.
> Thanks in advance.
> 
> 
> server {
>     listen      8443;
>     ssl                  on;
>     ssl_certificate      /etc/httpd/ssl/proxy-ssl.cer;
>     ssl_certificate_key  /etc/httpd/ssl/server.key;
>     ssl_client_certificate /etc/httpd/ssl/ca-bundle.crt;
>     ssl_session_timeout  5m;
>     ssl_protocols  SSLv2 SSLv3 TLSv1;
>     ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
>     ssl_prefer_server_ciphers   on;
>     ssl_verify_client       on;
>     ssl_verify_depth 5;
> 
>     error_page 400  /400.html;
>         location  /400.html {
>         root  /usr/share/nginx/html;
>         }
> 
>     access_log  /var/log/nginx/proxy.access.log  main;
>     error_log  /var/log/nginx/proxy.error.log  debug;
> 
>     location / {
>         proxy_pass      http://10.20.0.15:80; proxy_buffering on;
>         proxy_set_header    Subject    $ssl_client_s_dn;
>         proxy_set_header    Issuer     $ssl_client_i_dn;
>         proxy_set_header    SerialNumber     $ssl_client_serial;
>         client_max_body_size 10m;
>         client_body_buffer_size 128k;
>         proxy_connect_timeout 15;
>         proxy_intercept_errors on;
>        }
> }

I do not undernstand your problem completely, however, probably you need
something like this:

       error_page  495 = /invalid;
       error_page  496 = /no_cert;

       location / {
           # usual way
           proxy_pass  ...
       }

       location = /invalid {
           # invalid cert
           proxy_pass  ...
       }

       location = /no_cert {
           # no cert
           proxy_pass  ...
       }


-- 
Igor Sysoev
http://sysoev.ru/en/





More information about the nginx mailing list