[PATCH] Add a no_verify option for SSL client authentication
Tom van der Woerdt
info at tvdw.eu
Mon Aug 20 12:37:44 UTC 2012
For the record, I'm not affiliated with nginx.
If I understand your message correctly, you've got a load balancer (or
something similar) in front of nginx that already verifies the
certificates. You simply don't want nginx to do all the double checking,
or maybe you just don't want to store the keys on an application server.
A patch such as the one you supplied would be a major security hole (for
those who don't know what they're doing, which nowadays is most people)
while not offering much in return. What you describe can already be
achieved by (for example) passing the cert's DN to the application
server (and making sure the application server only accepts requests
from your load balancer):
proxy_set_header X-SSL-DN $ssl_client_s_dn;
This would also take care of the required SSL connection between your
load balancer and your application server, which could now simply be a
http connection that is kept alive if it's on a private subnet.
Significant performance boost that probably only requires minimal
changes in your application.
I'm going to stick with my original recommendation: don't include it in
nginx by default. While the patch might be very helpful in your specific
case, it's going to be used by people who have no idea what they're
doing as well, and that can be very dangerous. It has only one very
specific use case (that's covered by other options in nginx) but many
dangerous use cases. Maybe write it as a 3rd party module that does
this, or publish it as a patch on your own site?
Op 8/20/12 2:12 PM, Eric O'Connor schreef:
> Your feedback is correct in the sense that if we were not performing
> certificate verification, it would be bad news. It is not applicable
> here, though.
> In my original email I noted that we are in fact performing
> certificate verification, it is simply not done in nginx code. Your
> security concerns are irrelevant for our application, since in both
> cases the certificate is cryptographically verified long before the
> request is passed to the application (this is exactly what happens if
> you do the verification in nginx code, so there is no
> security-relevant difference between the two approaches). They are
> also irrelevant for nginx in general, because "no_verify" is a fairly
> self explanatory option that will be very unlikely to be used
> In light of your misunderstanding, I would ask that you please
> reconsider your recommendation.
> Eric O'Connor
> Feedback: this is a bad idea and super bad practice. If you want to
> use client cert auth but don't verify them, you might just as well
> only have an input field with 'What's your name?' as the login page,
> no password field. You drop any security that client auth offers.
> Recommendation: don't include this patch in nginx. The only thing it
> does is create a massive security hole.
More information about the nginx-devel