OpenAM中基于证书的身份验证需要设置http标头X-Client-Cert。我想使用apache作为反向代理并设置此标头,当url是/ openam / UI / Login?module = PKI时。
/ openam / UI / Login用于用户名和密码验证。
我有这个配置:
...
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
RequestHeader set X-Client-Cert ""
<Location "/openam/UI/Login/PKI">
RequestHeader set X-Client-Cert "%{SSL_CLIENT_CERT}s"
SSLVerifyDepth 10
SSLVerifyClient require
</Location>
RewriteRule /openam/UI/Login/PKI balancer://mycluster/openam/UI/Login?module=PKI [P]
...
它可以做到这一点,但成本是重写的 / openam / UI /登录?模块= PKI 至 / openam / UI /登录/ PKI 我不喜欢它。
如果没有重写,你可以建议我怎么做吗?
感谢。
答案 0 :(得分:2)
使用apache2.4我可以用:
<If "%{QUERY_STRING} =~ /module=PKI/">
RequestHeader set X-Client-Cert "%{SSL_CLIENT_CERT}s"
SSLVerifyDepth 10
SSLVerifyClient require
<Else>
RequestHeader set X-Client-Cert ""
</If>
答案 1 :(得分:0)
我认为使用SetEnvIf
和RequestHeader
的组合可以实现这一点。
使用SetEnvIf
设置一个变量,表明URI是针对正确的路径:
SetEnvIf Request_URI "/openam/UI/Login?module=PKI" x_client_cert=1
并使用env=[!]variable
参数添加RequestHeader
:
RequestHeader set X-Client-Cert "%{SSL_CLIENT_CERT}s" x_client_cert=1
我的语法可能略有错误 - 尤其可能是第二个(URI)参数转义为SetEnvIf的格式,但这种方法应该可行。
文档链接:
http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html#setenvif
http://httpd.apache.org/docs/2.2/mod/mod_headers.html#requestheader