web-dev-qa-db-ja.com

既存のSSL環境変数からカスタムヘッダーを作成するにはどうすればよいですか?

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環境変数の最後の非空白文字と等しくなる新しいヘッダーホスト名です。

5
MattPark

わかりました-私はそれを週の半ばに理解しましたが、それでも誰かに賞金を獲得する機会を与えたかったのです。

驚いたことに、これはどこにも十分に文書化されていませんが、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] 
 
3
MattPark

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を使用できます。

1
Richard Salts

SSLでこれを行ったことはありません(そして私はここでそれを本当に理解していません)が、mod_securityが答えになる可能性があります。復号化されたコンテンツ内のあらゆるものを書き換え/追加/置換/パッチすることができます。

0
GioMac