有问题的网络服务器是…
/usr/sbin/apache2 -v Server version: Apache/2.4.7 (Ubuntu) Server built: Mar 10 2015 13:05:59
httpd.x.conf文件的一部分…
SSLVerifyClient optional SSLVerifyDepth 3 SSLOptions +StdEnvVars +ExportCertData SetEnvIf SSL_CLIENT_M_SERIAL "5174EAF60000000014E5" JK_REMOTE_USER=Rest
但是在mod_jk.log中的结果是…
[date and time junk] [debug] init_ws_service::mod_jk.c (1097): Service protocol=HTTP/1.1 method=GET ssl=true host=(null) addr=10.2.0.85 name=local.apiclient.com port=443 auth=(null) user=(null) laddr=10.2.1.173 raddr=10.2.0.85 uri=/the/thing/i/requested
(问题是“用户”设置为null。)现在,如果我只想打开水闸,让 所有人 进入其余服务,则可以在httpd.x.conf文件中执行此操作。
SetEnv JK_REMOTE_USER Rest
…代替上面看到的SetEnvIf语句,然后mod_jk.log显示此信息…
[date and time junk] [debug] init_ws_service::mod_jk.c (1097): Service protocol=HTTP/1.1 method=GET ssl=true host=(null) addr=10.2.0.85 name=local.apiclient.com port=443 auth=(null) user=Rest laddr=10.2.1.173 raddr=10.2.0.85 uri=/the/thing/i/requested
现在注意“ user = Rest”-正常运行。而且tomcat方面(好吧,JBoss …好吧,实际上是WildFly …但实际上与tomcat是同一回事)确实在接受从apache传递来的“用户”,并授予适当的权限。
关键是,即使… my.local.domain / cgi-bin / printenv向我表明apache环境知道很多变量和值,包括SSL_CLIENT_M_SERIAL = 5174EAF60000000014E5 …似乎SetEnvIf本身无法确定SSL_CLIENT_M_SERIAL的值,并根据其值设置其他变量的值。
将其余服务用户ID配置为与SSL_CLIENT变量之一的值相同也可以。如电子邮件地址或序列号。因此,如果我可以使以下任何一项工作……
SetEnv JK_REMOTE_USER SSL_CLIENT_M_SERIAL SetEnv JK_REMOTE_USER %{SSL_CLIENT_M_SERIAL}x SetEnv JK_REMOTE_USER "SSL_CLIENT_M_SERIAL"
…那很好啊。我敢肯定,我缺少一些简单的东西。
而且,请没有特定于PHP的答案。这根本不是PHP环境。它甚至没有安装,也不会安装。
TLDR :如何根据SSL_CLIENT_M_SERIAL的值设置JK_REMOTE_USER变量?
我从未能够SetEnvIf使用mod_ssl环境变量。
SetEnvIf
但它适用于SetEnvIfExpr:
SetEnvIfExpr
SetEnvIfExpr "%{SSL_CLIENT_M_SERIAL} == '5174EAF60000000014E5'" JK_REMOTE_USER=Rest
刚发现为什么在mod_ssl的代码上:
/* ssl_hook_ReadReq needs to use the BrowserMatch settings so must * run after mod_setenvif's post_read_request hook. */