Como eu crio um cabeçalho personalizado a partir de uma variável de ambiente SSL existente?

5

OK, passei o dia todo nisso -

Estou usando o apache com mod_ssl Eu estou tentando tomar um cabeçalho de ambiente existente, "% {SSL_CLIENT_S_DN_CN} s" que se parece com "Lastname Firstname Mi username" e definir um novo cabeçalho chamado USERNAME e definir que igual a apenas username (os caracteres entre o último espaço eo fim da string)

Eu então inverteria o proxy desse cabeçalho para um host backend que o usaria para identificar o usuário.

Eu tentei muitas coisas diferentes. Eu não sei se o problema é que eu não entendo perl regex ou se eu não entendo a sintaxe ou não estou colocando no lugar certo, ou todos os três.

Aqui está um exemplo de uma coisa que eu tentei:

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

Tudo o que eu realmente quero é um novo nome de host do cabeçalho para igualar os últimos caracteres que não são espaços em branco na variável de ambiente DN_CN.

    
por MattPark 26.07.2013 / 23:22

3 respostas

2

Ok - Eu percebi isso no meio da semana, mas ainda queria dar a alguém uma chance de ganhar a recompensa.

Surpreendentemente, isso não está muito bem documentado em nenhum lugar, mas como usei mod_headers para fazer isso você pode encontrar essa documentação aqui .

O que você quer fazer é definir o cabeçalho , quer você o pegue do ssl ou do ambiente. Em seguida, você pode editar o cabeçalho usando regex e grupos de captura.

Alguns exemplos:


  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)(.*) [email protected] 

    
por 27.08.2013 / 18:36
1

Eu usaria a diretiva AuthBasicFake que definirá o cabeçalho e você pode fazer o ProxyPass no mesmo Local de localização . Seria algo parecido com isto: <Location "/blah">
AuthBasicFake %{SSL_CLIENT_S_DN_CN} e ProxyPass http://example.org/blah e </Location>

Se você tiver outros atributos x509 no assunto, como o nome de usuário, poderá usar SSL_CLIENT_S_DN_uid ou SSL_CLIENT_S_DN_email.

    
por 13.08.2013 / 01:42
0

Nunca fiz isso com SSL (e eu realmente não entendo isso aqui), mas o mod_security pode ser uma resposta. Ele pode reescrever / adicionar / substituir / corrigir qualquer coisa dentro do conteúdo descriptografado.

    
por 19.08.2013 / 00:10