OK私はこれに一日中費やしました-
Mod_sslでApacheを使用しています。「LastnameFirstnameMi username」のような既存の環境ヘッダー「%{SSL_CLIENT_S_DN_CN} s」を取得し、USERNAMEという新しいヘッダーを設定して、それをユーザー名だけに設定しようとしています(最後のスペースと文字列の終わりの間の文字)
次に、そのヘッダーをバックエンドホストにリバースプロキシし、バックエンドホストがそれを使用してユーザーを識別します。
私はいろいろなことを試しました。問題がPerl正規表現を理解していないことなのか、構文を理解していないのか、適切な場所に配置していないのか、あるいは3つすべてなのかわかりません。
これが私が試した1つの例です:
SetEnvIf SSL_CLIENT_S_DN_CN (.*\ )(.*) newhostname=$2
RequestHeader set HOSTNAME "%{newhostname}e"
私が本当に必要としているのは、DN_CN環境変数の最後の非空白文字と等しくなる新しいヘッダーホスト名です。
わかりました-私はそれを週の半ばに理解しましたが、それでも誰かに賞金を獲得する機会を与えたかったのです。
驚いたことに、これはどこにも十分に文書化されていませんが、mod_headersを使用してこれを行ったので、その文書を見つけることができます ここ 。
あなたがそれをしたいことあなたがsslからそれをつかむか環境からそれをつかむかどうかにかかわらず、ヘッダーを設定してください。 次に、正規表現とキャプチャグループを使用してヘッダーを編集できます。
いくつかの例:
RequestHeader set REMOTE_USER "%{SSL_CLIENT_S_DN_CN} s" RequestHeader edit REMOTE_USER(。*\s)(。*)$ 2 RequestHeader set AUTHENTICATE_CN "%{ SSL_CLIENT_S_DN_CN} s " RequestHeader edit AUTHENTICATE_CN(。*\s)(。*)$ 1 RequestHeader set AUTHENTICATE_MAIL"%{SSL_CLIENT_S_DN_CN} s " RequestHeader edit AUTH s)(。*)$ [email protected]
AuthBasicFakeディレクティブ を使用してヘッダーを設定すると、同じ Locationブロック で ProxyPass を実行できます。次のようになります。<Location "/blah">
AuthBasicFake %{SSL_CLIENT_S_DN_CN}
ProxyPass http://example.org/blah
</Location>
サブジェクトにユーザー名などの他のx509属性がある場合は、SSL_CLIENT_S_DN_uidまたはSSL_CLIENT_S_DN_emailを使用できます。
SSLでこれを行ったことはありません(そして私はここでそれを本当に理解していません)が、mod_securityが答えになる可能性があります。復号化されたコンテンツ内のあらゆるものを書き換え/追加/置換/パッチすることができます。