Apache服务器级SSLVerifyClient配置无法设置IP例外的问题求助
Apache服务器级SSLVerifyClient配置无法设置IP例外的问题求助
各位好,我遇到了一个Apache SSL配置的棘手问题,折腾了好久都没解决,想请大家帮忙指点一下。
情况是这样的:我需要在服务器级别强制开启客户端证书验证,配置如下:
SSLVerifyClient require SSLVerifyDepth 2 RequestHeader set SSL_CLIENT_VERIFY ""
但同时,我想给特定IP 10.128.119.45/32 开个例外——允许这个IP的请求不需要客户端证书就能访问。我尝试在<Location />块里添加了条件判断:
<Location /> <If "-R '10.128.119.45/32'"> SSLVerifyClient none </If> SSLOptions +StdEnvVars ExportCertData OptRenegotiate RequestHeader set SSL_CLIENT_S_DN_CN "%{SSL_CLIENT_S_DN_CN}s" RequestHeader set SSL_CLIENT_I_DN_CN "%{SSL_CLIENT_I_DN_CN}s" RequestHeader set SSL_CLIENT_CERT "%{SSL_CLIENT_CERT}s" RequestHeader set SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}s" Require expr %{SSL_CLIENT_I_DN_CN} == 'Example Users Authentication' && ( %{SSL_CLIENT_S_DN_CN} == "user1" || %{SSL_CLIENT_S_DN_CN} == "user55" || %{SSL_CLIENT_S_DN_CN} == "user2" || %{SSL_CLIENT_S_DN_CN} == "user21575" || %{SSL_CLIENT_S_DN_CN} == "user3" || %{SSL_CLIENT_S_DN_CN} == "user4") </Location>
结果这个例外完全没生效,用curl测试的时候还是会提示需要客户端证书:
curl: (35) NSS: client certificate not found (nickname not specified)
我也试过把<If>块移到<Location>外面,直接放在服务器级配置里,还是一样的问题。另外我不能去掉服务器级的SSLVerifyClient require,否则会出现重协商失败的错误:
AH02261: Re-negotiation handshake failed
想问问大家,我是不是哪里配置错了?或者有没有其他方法可以实现这个“服务器级强制验证,但特定IP例外”的需求?
备注:内容来源于stack exchange,提问作者sebelk




