我有一些URL,我喜欢使用像这样的指令在我的apacheconfigurationSSL客户端证书保护:
SSLVerifyClient require SSLVerifyDepth 10 SSLRequireSSL SSLOptions +StrictRequire SSLRequire %{REMOTE_ADDR} =~ m/^127\.0\.0\.1$/ \ or ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \ and %{SSL_CLIENT_I_DN_CN} eq "xxx" \ and %{SSL_CLIENT_S_DN_Email} in {"[email protected]", "[email protected]",} )
似乎没有任何nginx指令来处理这个问题,所以我假设我必须把所有东西都传递给Apache后端。
这使我想到我的问题,如何传递encryption的ssl? 所有的代理服务器都在nginx级别解密ssl数据包,然后把它们传递给Apache。
如果你想让Apache处理SSLvalidation,那么你需要把它放在nginx之前,或者做一些疯狂的事情,把客户端的DN通过一个自定义的头部或者别的东西传递给Apache – 这是一个非常多的工作。
虽然有一些设备可以在nginx中进行DN检查。 Nginx的HTTP SSL模块文档给出了可能的variables(底部,不幸的是标记的填充,所以没有头),但$ssl_client_s_dn应该是你要找的,你可以使用nginx的类似编程的指令( if $ssl_client_s_dn ~= CN=something_or_othertypes的东西)redirect或返回一个403,如果你不喜欢提供的证书。 这与你以前使用Apache的方式有很大的不同,但最终Apache做这种事情的方式也不是油画,所以这一切都取决于你喜欢哪个丑陋的东西。
不过,我很好奇,为什么你要把nginx放在Apache面前呢?他们中的任何一个都应该能够完成服务网页的整个工作。