Назад | Перейти на главную страницу

Как создать собственный заголовок из существующей переменной среды SSL?

Хорошо, я потратил на это весь день ...

Я использую apache с mod_ssl. Я пытаюсь взять существующий заголовок среды «% {SSL_CLIENT_S_DN_CN} s», который выглядит как «Фамилия, имя, имя пользователя Mi», и установить новый заголовок с именем USERNAME и установить его равным просто имени пользователя ( символы между последним пробелом и концом строки)

Затем я перевернул бы этот заголовок прокси-серверу на серверный хост, который будет использовать его для идентификации пользователя.

Я перепробовал много разных вещей. Я не знаю, проблема в том, что я не понимаю регулярное выражение Perl, или я не понимаю синтаксис, или я не помещаю его в нужное место, или все три.

Вот пример того, что я пробовал:

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

Все, что мне действительно нужно, это новый заголовок Hostname, равный последним непробельным символам в переменной окружения 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 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 может быть ответом. Он может переписывать / добавлять / заменять / исправлять что-либо внутри расшифрованного содержимого.