如何从现有SSL环境variables创build自定义标题?

好吧,我已经花了整整一天的时间

我正在使用mod_ssl的Apache我试图采取一个现有的环境头,“%{SSL_CLIENT_S_DN_CN} s”,它看起来像“姓氏名Mi用户名”,并设置一个名为USERNAME的新标题,并设置等于只是用户名最后一个空格和string结尾之间的字符)

然后,我会反向代理该头到后端主机,将使用它来识别用户。

我尝试了很多不同的东西。 我不知道如果问题是我不明白Perl的正则expression式,或者如果我不明白的语法,或者我不把它放在正确的地方,或所有三个。

这是我尝试的一个例子:

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

我真正想要的是一个新的标题主机名等于DN_CN环境variables中的最后一个非空白字符。

好的 – 我在周中想清楚了,但还是想给别人一个赚钱的机会。

令人惊讶的是,这是没有很好的文件logging在任何地方,但正如我使用mod_headers来做到这一点,你可以在这里find文档。

你想做什么设置标题 ,无论你从SSL或环境抓住它。 然后你可以使用正则expression式和捕获组来编辑头文件

一些例子:


   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 

我会使用AuthBasicFake指令来设置标题,然后你可以在同一个位置块中执行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可能是一个答案。 它可以重写/添加/replace/修补解密内容中的任何内容。