有问题的网络服务器是...
/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
(问题是“用户”设置为空。)现在,如果我只想打开闸门并让每个人都进入其余服务,我可以在 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 变量?