I’m using nginx as a proxy to a backend server.
The backend server is also using nginx and enforcing client certificate
authentication using the ssl_client_certificate and ssl_verify_client
directives.
However, the backend is still responding with a 400 reponse code “No
required SSL certificate was sent”.
Note that when issuing requests to the backend server using wget with the
client certificate, I get a valid 200 OK response.
What am I missing in my nginx configuration?
Configuration looks fine, but likely it’s not a configuration
which is used to handle the requests. Some basic hints:
make sure to test with something low level like
telnet/curl/wget, browsers often return cached results;
check if the configuration is actually loaded (you can use “nginx -t”
to check for syntax errors; look into error log after a
configuration reload to make sure reload went fine; just stop and
then start nginx to make sure);
make sure the location you are configuring is one used for
requests (a simple test would be to write something like
“return 200 ok;” in it and check if “ok” is actually returned).
Note well that proxy_ssl_certificate is only available in nginx
1.7.8 and newer. Configuration testing as done by “nginx -t”
should complain about unknown directives if you are using an older
version.
The configuration is loaded correctly and is handling requests.
“nginx -t” shows that all is OK and a 200 OK response is returned
correctly.
My front-end server is running version 1.9.10 (I ran “nginx -v”).
So proxy_ssl_certificate is valid in my case.
The backend server is running version 1.4.6 - but does this matter?