Restrinja o Apache para permitir acesso apenas usando SSL para alguns diretórios

30

Eu tenho um servidor Apache 2.2 com um certificado SSL que hospeda vários serviços que devem ser acessados apenas usando SSL.

ie: link : //myserver.com/topsecret/ deve ser permitido enquanto link : //myserver.com/topsecret/ deve ser negado ou, idealmente , redirecionado para https. O link não deve ter essa restrição e deve funcionar usando http ou https.
A decisão de permitir / negar http é feita no diretório de nível superior e afeta todo o conteúdo abaixo dele.

Existe uma diretiva que pode ser colocada na configuração do Apache para retratar o acesso dessa maneira?

    
por DrStalker 19.09.2008 / 03:19

6 respostas

35

A diretiva SSLRequireSSL é o que você está procurando.

Dentro do seu <VirtualHost> , ou no nível superior, se você não estiver usando hosts virtuais:

<Directory /topsecret>
  SSLRequireSSL
</Directory>

Ou em .htaccess :

SSLRequireSSL
    
por 19.09.2008 / 03:24
7

Na configuração global, você pode usar:

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{HTTPS} !on
   RewriteRule .* https://%{HTTP_HOST}/%{REQUEST_URI} [R=301,L,QSA]
</IfModule>

Da mesma forma, você pode usar um arquivo .htaccess no primeiro diretório da árvore de diretórios segura:

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{HTTPS} !on
   RewriteRule .* https://%{HTTP_HOST}/%{REQUEST_URI} [R=301,L,QSA]
</IfModule>

Esse último também pode ser colocado dentro de uma diretiva de diretório na configuração do host global ou virtual.

    
por 19.09.2008 / 03:25
1

Como alternativa, você pode usar a linguagem do lado do servidor para fazer o processamento para você, em vez de usar as opções de configuração do Apache (se, talvez, você não tiver acesso à configuração do servidor).

Por exemplo, com o PHP:

if (!isset($_SERVER['HTTPS'])) {
  // put your redirect here
  header('Location: http://myserver.com/public');
}

(mas fique atento - se você estiver usando ISAPI no Microsoft IIS, se a solicitação não estiver sendo roteada por HTTPS, o valor da variável $ _SERVER ['HTTPS'] será estar "desligado")

    
por 19.09.2008 / 03:27
1

Alguém mencionou o SSLRequireSSL, mas acho que não funciona sozinho e não encontrei um exemplo de sucesso com ele. A maneira recomendada é link Eu apliquei isso e funciona bem!

    
por 21.12.2015 / 14:54
0

Supondo que você esteja usando diretivas do VirtualHost,

Coloca uma diretiva de diretório no acesso negado ao não-ssl virtual.

Em seguida, coloque uma diretiva Directory no acesso de concessão ssl virtualhost.

    
por 19.09.2008 / 03:22
0

Eu sempre fiz este mod_rewrite em um arquivo .htaccess, mas você deve ser capaz de fazê-lo dentro do seu arquivo de configuração principal também.

Aqui está um guia com algumas maneiras de fazer isso acontecer: Redirecionamentos inteligentes de HTTP e HTTPS RewriteRule

    
por 19.09.2008 / 03:24