Como autenticar certificados de cliente ssl com front-end nginx?

3

Eu tenho algumas URLs que eu gosto de proteger com certificados de cliente ssl usando diretivas como essas nas configurações do meu apache:

SSLVerifyClient require
SSLVerifyDepth  10
SSLRequireSSL
SSLOptions +StrictRequire
SSLRequire %{REMOTE_ADDR} =~ m/^127\.0\.0\.1$/ \
  or ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
  and %{SSL_CLIENT_I_DN_CN} eq "xxx" \
  and %{SSL_CLIENT_S_DN_Email} in {"[email protected]", "[email protected]",} )

Parece não haver nenhuma diretiva nginx para lidar com isso, então eu suponho que tenho que passar tudo para o backend do Apache.

O que me leva à minha pergunta, como passar SSL criptografado? Todo o proxy está decriptando os pacotes ssl no nível nginx antes de passá-los para o Apache.

    
por Van Gale 30.08.2009 / 06:07

1 resposta

2

Se você quiser que o Apache lide com a verificação SSL, você precisará colocá-lo na frente do nginx, ou então fazer algumas coisas malucas com passar o DN do cliente para o Apache através de um cabeçalho personalizado ou algo assim - uma quantidade enorme de trabalho.

Existem algumas algumas facilidades para fazer a verificação do DN no nginx; os documentos do módulo SSL HTTP da Nginx fornecem as possíveis variáveis (logo abaixo, e infelizmente a marcação está cheia, então não há cabeçalho para ela) mas $ssl_client_s_dn deve ser o que você está procurando, e você pode usar as diretivas de programação do nginx ( if $ssl_client_s_dn ~= CN=something_or_other tipo de coisa) para redirecionar ou retornar um 403 se você não gostar do certificado apresentado. Vai ser muito diferente do que você está acostumado com o Apache, mas no final das contas a maneira do Apache de fazer esse tipo de coisa não é uma pintura a óleo também, então tudo depende de qual feia você prefere ...

Estou curioso para saber por que você colocaria o nginx na frente do Apache ... qualquer um deles deve ser capaz de fazer todo o trabalho de servir páginas da web.

    
por 30.08.2009 / 06:23