Apache'yi bazı dizinler için yalnızca SSL kullanarak erişime izin verecek şekilde kısıtlayın


34

Yalnızca SSL kullanarak erişmesi gereken birkaç hizmeti barındıran bir SSL sertifikasına sahip bir Apache 2.2 sunucum var.

yani: https : //myserver.com/topsecret/ izin verilirken, http : //myserver.com/topsecret/ ya reddedilmeli ya da ideal olarak https'ye yönlendirilmelidir. http://myserver.com/public bu kısıtlamaya sahip olmamalı ve http veya https kullanarak çalışmalıdır.
Http'ye izin verme / reddetme kararı en üst düzey dizinde verilir ve altındaki tüm içeriği etkiler.

Erişimi bu şekilde kısıtlamak için Apache yapılandırmasına yerleştirilebilecek bir yönerge var mı?

Yanıtlar:


38

SSLRequireSSL yönergesi aradığınız budur.

İçerideki <VirtualHost>veya üst seviyede sanal ana kullanmıyorsanız:

<Directory /topsecret>
  SSLRequireSSL
</Directory>

Veya .htaccess:

SSLRequireSSL

1
Sunucu Arızasına Hoşgeldiniz! Yanıtların içeriğe işaretçileri değil, içeriğe sahip olmasını gerçekten tercih ediyoruz. Bu teorik olarak soruyu cevaplayabilir, ancak cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak tercih edilir. Teşekkür ederim!
Chris S,

8
Tamam, beş yaşındaki yazımı bir örnekle güncelledim :)
Thomas

1
5 yaşında ya da olmasın, adil olmak gerekirse, aklınıza gelen linkin kaybolacağı, cevabınızı daha sonra veya daha sonra bilgi arayarak gelen kişiye cevap vermeyecek şekilde yapmasıdır. Bu yüzden gerçekten keskin yorumunuzu oy kullandım (dürüst), ama aynı zamanda cevabın yararlı kalması için bir bağlamı olması gerektiğine de tamamen katılıyorum. Özellikle doğru cevap olarak işaretlendiğinden beri.
Craig

SO / SF topluluğunun sadece bir bağlantı konusunda katı olduğunu ve o zamanki "lmgtfy" cevaplarını sanmıyorum. Ama katılıyorum; geçmişe dönük bir düzenleme herhangi bir zamanda anlamlıdır.
Thomas

Bu yönerge ifadesini hangi yapılandırma dosyasına eklerim?
dan carter

8

Genel yapılandırmada şunları kullanabilirsiniz:

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

Benzer şekilde, güvenli dizin ağacının ilk dizininde bir .htaccess dosyası kullanabilirsiniz:

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

Bu sonuncusu, genel veya sanal ana bilgisayar yapılandırmasında bir dizin yönergesinin içine de yerleştirilebilir.


HTTP’yi HTTPS’ye yeniden yönlendirmek, belirli MiTM saldırı türlerini açar. Sadece bir uyarı.
Craig

1

Alternatif olarak, Apache'nin yapılandırma seçeneklerini kullanmak yerine sizin için işlem yapmak için sunucu tarafı dili kullanabilirsiniz (belki de sunucunun yapılandırmasına erişiminiz yoksa).

Örneğin, PHP ile:

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

(gerçi sadece farkında olmak - istek olup olmadığını Microsoft IIS üzerinde ISAPI eğer değil HTTPS üzerinden yönlendirilmekte, $ _SERVER ardından değeri [ 'HTTPS'] değişkeni "kapalı" olacaktır)



0

VirtualHost yönergelerini kullandığınızı varsayarsak,

Ssl olmayan sanal ana bilgisayar erişimini reddetme dizinine bir Dizin yönergesi yerleştirin.

Ardından, erişim sağlayan ssl virtualhost içine bir Directory yönergesi yerleştirin.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.