Como posso evitar que o Apache solicite credenciais em sites não SSL?

1

Eu tenho um servidor web com vários hosts virtuais. Alguns desses hosts possuem um site ssl associado. Eu tenho uma diretiva DirectoryMatch no meu arquivo de configuração principal que requer autenticação básica para qualquer diretório com garantido como parte do caminho do diretório. Em sites que têm um site SSL, eu tenho uma regra de reescrita (localizada na configuração não ssl para esse site), que redireciona para o site SSL, mesmo uri.

O problema é que o site http (80) solicita as credenciais primeiro e, em seguida, o site https (443) solicita as credenciais novamente. Gostaria de evitar que o site http perguntasse e, assim, evitar o potencial de alguém inserir credenciais e enviá-las em texto não criptografado. Eu sei que poderia mover o DirectoryMatch para o site específico e apenas colocar a declaração auth na configuração SSL, mas isso introduziria a possibilidade de se esquecer de proteger diretórios críticos ao criar novos sites.

Aqui estão as declarações pertinentes: httpd.conf (todos os sites):

<DirectoryMatch "_secured_">
    AuthType Basic
    AuthName "+ + + Restrcted Area on Server + + +"
    AuthUserFile /home/websvr/.auth/std.auth
    Require valid-user
</DirectoryMatch>

site.conf (específico para o site individual)

<DirectoryMatch "_secured_">
    RewriteEngine On
    RewriteRule .*(_secured_.*) https://site.com/$1
</DirectoryMatch>

Existe uma maneira de deixar o DirectoryMatch no arquivo de configuração principal e impedir a solicitação de autorização do site http?

Executando o Apache 2 no servidor Ubuntu 10.04 a partir do pacote padrão. Eu tenho AllowOverride definido como nenhum - eu prefiro lidar com coisas nos arquivos de configuração em vez de. Htaccess.

    
por Scott 03.03.2011 / 16:18

1 resposta

3

Você precisa fazer a reescrita antes da solicitação de autenticação.

Como são suas outras regras de reescrita? Se forem todos iguais ao exemplo, você poderá movê-los para o DirectoryMatch principal. Escreva um cheque para ver se o site é SSL. Se não, redirecione.

Em seguida, a autenticação aconteceria depois. Algo como:

<DirectoryMatch "_secured_">

    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^.*(_secured_.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

    AuthType Basic
    AuthName "+ + + Restrcted Area on Server + + +"
    AuthUserFile /home/websvr/.auth/std.auth
    Require valid-user
</DirectoryMatch>
    
por 03.03.2011 / 16:32