Mod-Rewrite

如何從現有 SSL 環境變數創建自定義標頭?

  • August 27, 2013

好吧,我花了一整天的時間——

我正在使用帶有 mod_ssl 的 apache 我正在嘗試採用現有的環境標頭“%{SSL_CLIENT_S_DN_CN}s”,它看起來像“Lastname Firstname Mi username”並設置一個名為 USERNAME 的新標頭並將其設置為僅使用者名(最後一個空格和字元串結尾之間的字元)

然後,我將該標頭反向代理到後端主機,該主機將使用它來辨識使用者。

我嘗試了很多不同的東西。我不知道問題是我不理解 perl 正則表達式,還是我不理解語法,或者我沒有把它放在正確的位置,或者三者兼而有之。

這是我嘗試過的一件事的範例:

SetEnvIf SSL_CLIENT_S_DN_CN (.*\ )(.*) newhostname=$2
RequestHeader set HOSTNAME "%{newhostname}e"

我真正想要的是一個新的標頭主機名,以等於 DN_CN 環境變數中最後一個非空白字元。

好的——我在周中想通了,但仍然想給某人一個賺取賞金的機會。

令人驚訝的是,這在任何地方都沒有很好的文件記錄,但是當我使用 mod_headers 執行此操作時,您可以在此處找到該文件。

無論您是從 ssl 還是環境中獲取它, 您都想**設置標題。**然後,您可以使用正則表達式和擷取組編輯標題

一些例子:


RequestHeader 設置 REMOTE_USER "%{SSL_CLIENT_S_DN_CN}s"
RequestHeader 編輯 REMOTE_USER (.*\s)(.*) $2
RequestHeader 設置 AUTHENTICATE_CN "%{SSL_CLIENT_S_DN_CN}s"
RequestHeader 編輯 AUTHENTICATE_CN (.*\s)(.*) $1
RequestHeader 設置 AUTHENTICATE_MAIL "%{SSL_CLIENT_S_DN_CN}s"
RequestHeader 編輯 AUTHENTICATE_MAIL (.*\s)(.*) $2@gmail.com

引用自:https://serverfault.com/questions/526655