問題のウェブサーバーは...
/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側(OK、JBoss ... OK、実際にはWildFly ...でも実際にはTomcatと同じです)は、Apacheから渡された「ユーザー」を実際に受け入れ、適切な権限を付与しています。
ポイントは、 ...my.local.domain/cgi-bin/printenv が、Apache 環境が SSL_CLIENT_M_SERIAL = 5174EAF60000000014E5 を含む一連の変数と値を認識していることを示しているにもかかわらず、... SetEnvIf 自体ができないように見えることです。 SSL_CLIENT_M_SERIAL の値を確認し、その値に基づいて他の変数の値を設定します。
また、残りのサービスのユーザー ID を SSL_CLIENT 変数の 1 つの値と同じに設定しても問題ありません。メールアドレスとかシリアルナンバーとか。したがって、次のいずれかを機能させることができれば...
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 変数を設定する方法は?