在 IF 语句中使用 mod_ssl 变量

时间:2021-03-12 16:52:45

标签: apache apache2 mod-ssl

我目前正在尝试设置一个只能使用 ssl 客户端证书访问的虚拟主机。保护主机已完成,但是我想设置一个根据值而不同的标头 SSL_CLIENT_S_DN_O 其中包含客户端证书主题组织的信息。

问题是,我无法检查提到的变量的内容。到目前为止,我已经尝试使用 例如

第一次尝试

<If "%{SSL_CLIENT_S_DN_O} == 'xxxx'">
     Header set user_key "key" 
</If>

第二次尝试

RewriteEngine on
RewriteCond %{SSL:SSL_CLIENT_S_DN_O} "=xxxx"
RewriteRule - [E=key:key]

Header set user_key "%{key}e" 

第三次尝试

SetEnvIfExpr "%{SSL_CLIENT_S_DN_O} == 'xxxx'" key=test
Header set user_key "key" ENV=key

但是,上述解决方案均无效。变量要么是空的,要么似乎丢失了。 检查 mod_ssl 变量的正确方法是什么?

先谢谢你! :-)

虚拟主机配置

<VirtualHost *:443>

    ServerName www.Apache-Test.de

    # activate SSL
    SSLEngine on
    # activate SSL for proxied traffic
    SSLProxyEngine on

    SSLCertificateFile "C:\Users\A675866\apache-certs\root\ca2\server.crt"
    SSLCertificateKeyFile "C:\Users\A675866\apache-certs\root\ca2\server.key"
    
    SSLCACertificateFile "C:\Users\A675866\apache-certs\root\ca2\ca.crt"
   
    # Every Path needs a valid client cert to be accessed
    <Location />
      SSLOptions           +FakeBasicAuth +StdEnvVars
      SSLVerifyClient      require      
      SSLRequireSSL

      <RequireAll>
        Require expr "%{SSL_CLIENT_S_DN_O}  == 'xxxx'"
        Require expr "%{SSL_CLIENT_S_DN_C}  == 'xxxx'"
        Require expr "%{SSL_CLIENT_S_DN_OU} in {'xxxx', 'yyyy', 'zzzz'}"
        Require expr "%{HTTP_HOST} == 'www.Apache-Test.de'"
      </RequireAll>     

      RewriteEngine on
      RewriteCond %{SSL:SSL_CLIENT_S_DN_O} "=xxxx"
      RewriteRule - [E=key:key]
      Header set user_key "%{key}e" 
        
    </Location>
    
      RewriteEngine on
      RewriteCond %{SSL:SSL_CLIENT_S_DN_O} "=xxxx"
      RewriteRule - [E=key:key]
      Header set user_key "%{key}e" 

     
    <If "%{SSL_CLIENT_S_DN_O} == 'xxxx'">
         Header set user_key "key" 
    </If>

     SetEnvIfExpr "%{SSL_CLIENT_S_DN_O} == 'xxxx'" key=test
     Header set user_key "key" ENV=key

</VirtualHost>

更新

因此,似乎在执行 If 条件之后评估变量。这会导致变量为空。

http://httpd.apache.org/docs/2.4/expr.html#functions
http://httpd.apache.org/docs/2.4/expr.html
http://httpd.apache.org/docs/2.4/mod/core.html#if

尽管如此,我需要一种方法来检查 mod_ssl 变量,以便我可以确定哪个客户端正在向我的 vhost 进行身份验证并相应地设置 RequestHeader。 有什么想法吗?

0 个答案:

没有答案