Limitare Apache per consentire l'accesso solo tramite SSL per alcune directory


34

Ho un server Apache 2.2 con un certificato SSL che ospita diversi servizi a cui dovrebbe accedere solo tramite SSL.

vale a dire: https : //myserver.com/topsecret/ dovrebbe essere consentito mentre http : //myserver.com/topsecret/ dovrebbe essere negato o, idealmente, reindirizzato a https. http://myserver.com/public non dovrebbe avere questa limitazione e dovrebbe funzionare utilizzando http o https.
La decisione di consentire / negare http viene presa nella directory di livello superiore e influisce su tutto il contenuto sottostante.

Esiste una direttiva che può essere inserita nella configurazione di Apache per limitare l'accesso in questo modo?

Risposte:


38

La direttiva SSLRequireSSL è ciò che stai cercando.

All'interno di <VirtualHost>o al livello superiore se non si utilizzano host virtuali:

<Directory /topsecret>
  SSLRequireSSL
</Directory>

O in .htaccess:

SSLRequireSSL

1
Benvenuti in Server Fault! Preferiamo davvero che le risposte abbiano contenuto, non puntatori al contenuto. Ciò può teoricamente rispondere alla domanda, tuttavia sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento come riferimento. Grazie!
Chris S,

8
Ok, ho aggiornato il mio post di cinque anni con un esempio :)
Thomas

1
Per essere onesti, con 5 anni o meno, il ragionamento è che il link a cui fai riferimento potrebbe scomparire, rendendo la tua risposta per lo più o completamente inutile a qualcuno che sta cercando informazioni in un secondo momento. Quindi in realtà ho votato il tuo commento accigliato (onesto), ma sono anche totalmente d'accordo sul fatto che la risposta dovrebbe avere un certo contesto in modo che rimanga utile. Soprattutto perché è contrassegnato come la risposta corretta.
Craig,

Non credo che la comunità SO / SF fosse così severa nei confronti di just-a-link e "lmgtfy" risposte allora. Ma sono d'accordo; una modifica retroattiva ha senso in qualsiasi momento.
Thomas,

A quale file di configurazione aggiungerei quella direttiva direttiva?
Dan Carter,

8

Nella configurazione globale è possibile utilizzare:

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

Allo stesso modo è possibile utilizzare un file .htaccess nella prima directory della struttura di directory sicura:

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

Quest'ultimo potrebbe anche essere inserito in una direttiva directory nella configurazione globale o dell'host virtuale.


Il reindirizzamento da HTTP a HTTPS ti apre a determinati tipi di attacchi MiTM. Solo un avvertimento
Craig,

1

In alternativa, potresti utilizzare il linguaggio lato server per eseguire l'elaborazione per te, anziché utilizzare le opzioni di configurazione di Apache (se, forse, non hai accesso alla configurazione del server).

Ad esempio, con PHP:

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

(anche se tieni presente che se stai utilizzando ISAPI su Microsoft IIS, se la richiesta non viene instradata tramite HTTPS, il valore della variabile $ _SERVER ['HTTPS'] sarà "off")



0

Supponendo che tu stia utilizzando le direttive VirtualHost,

Inserire una direttiva Directory nell'host virtuale non SSL che nega l'accesso.

Quindi, inserire una direttiva Directory nell'host virtuale ssl che concede l'accesso.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.