Apache mod_ssl环境变量修改:剥离UPN的@域名后缀问题
剥离SSL_CLIENT_SAN_OTHER_msUPN_0中的@域名部分
你可以通过两种方式实现只保留UPN中@符号前的部分,以下是修正后的配置方案:
方案一:使用mod_rewrite(修正你的原有思路)
你的原有mod_rewrite配置存在正则逻辑错误和语法问题,修正后的配置如下:
# 匹配UPN格式,捕获@前的用户名部分 RewriteCond %{SSL_CLIENT_SAN_OTHER_msUPN_0} ^([^@]+)@.*$ # 不修改URL,仅将捕获的内容存入环境变量USER_NAME RewriteRule ^ - [E=USER_NAME:%1] # 设置请求头为提取出的用户名,注意末尾的e表示引用环境变量 RequestHeader set X-Client-Subject-CN %{USER_NAME}e
关键修正点:
- RewriteCond的正则
^([^@]+)@.*$精准匹配xxx@xxx格式的UPN,([^@]+)捕获所有@前的字符作为用户名。 - RewriteRule使用
^ -表示不对URL做重写,仅执行设置环境变量的操作;%1引用RewriteCond中捕获的第一个分组内容。 - RequestHeader中必须用
%{USER_NAME}e格式引用环境变量,缺失e会导致无法正确解析变量。
方案二:使用mod_headers的expr模式(更简洁)
无需依赖mod_rewrite,直接通过mod_headers的表达式功能提取内容:
RequestHeader set X-Client-Subject-CN "expr=%{SSL_CLIENT_SAN_OTHER_msUPN_0} =~ /^([^@]+)@/ && $1"
这个配置通过正则匹配UPN,若匹配成功则返回@前的分组内容,直接赋值给请求头,步骤更精简。
内容的提问来源于stack exchange,提问作者mfuller20
相关产品推荐
相关产品推荐

