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


34

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

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

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

Respostas:


38

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

11
Bem-vindo à falha do servidor! Nós realmente preferimos que as respostas tenham conteúdo, não ponteiros para o conteúdo. Teoricamente, isso pode responder à pergunta, no entanto, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência. Obrigado!
Chris S

8
Ok, eu atualizei meu cinco anos post com um exemplo :)
Thomas

11
Para ser justo, com 5 anos ou não, o raciocínio é que o link para o qual você aponta pode desaparecer, tornando sua resposta quase total ou completamente inútil para alguém que esteja procurando as informações posteriormente. Na verdade, votei seu comentário sarcástico (honesto), mas também concordo totalmente que a resposta deve ter algum contexto para que continue sendo útil. Especialmente porque está marcado como a resposta correta.
22415 Craig

Eu não acho que a comunidade SO / SF tenha sido tão rigorosa quanto a respostas apenas de um link e "lmgtfy" na época. Mas eu concordo; uma edição retroativa faz sentido a qualquer momento.
Thomas

A qual arquivo de configuração eu adicionaria essa instrução de diretiva?
dan carter

8

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 seguros:

<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.


Redirecionar HTTP para HTTPS abre para certos tipos de ataques MiTM. Apenas uma cautela.
22715 Craig

1

Como alternativa, você pode usar o idioma 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 PHP:

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

(esteja ciente de que, se você estiver usando o ISAPI no Microsoft IIS, se a solicitação não estiver sendo roteada por HTTPS, o valor da variável $ _SERVER ['HTTPS'] ficará "desativado")



0

Supondo que você esteja usando as diretivas do VirtualHost,

Coloque uma diretiva de diretório no host virtual não ssl que nega o acesso.

Em seguida, coloque uma diretiva de diretório no host virtual ssl que concede acesso.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.