केवल कुछ निर्देशिकाओं के लिए SSL का उपयोग करने की अनुमति देने के लिए अपाचे को प्रतिबंधित करें


34

मेरे पास एक अपाचे 2.2 सर्वर है जिसमें एसएसएल प्रमाणपत्र कई सेवाओं की मेजबानी करता है जो केवल एसएसएल का उपयोग करके होना चाहिए।

अर्थात्: https : //myserver.com/topsecret/ जबकि की अनुमति दी जानी चाहिए http : //myserver.com/topsecret/ या तो इनकार कर दिया जाना चाहिए या, आदर्श https पर रीडायरेक्ट। http://myserver.com/public को यह प्रतिबंध नहीं होना चाहिए, और उसे http या https का उपयोग करके काम करना चाहिए।
Http को अनुमति देने / अस्वीकार करने का निर्णय शीर्ष स्तर की निर्देशिका में किया गया है, और इसके नीचे सभी सामग्री को प्रभावित करता है।

क्या कोई निर्देश है जिसे अपाचे कॉन्फिगरेशन में इस तरह से एक्सेस करने के लिए रखा जा सकता है?

जवाबों:


38

SSLRequireSSL निर्देश आप जो खोज रहे हैं है।

<VirtualHost>यदि आप वर्चुअल होस्ट का उपयोग नहीं कर रहे हैं तो अपने अंदर या शीर्ष स्तर पर:

<Directory /topsecret>
  SSLRequireSSL
</Directory>

या में .htaccess:

SSLRequireSSL

1
सर्वर दोष में आपका स्वागत है! हम वास्तव में पसंद करते हैं कि उत्तर में सामग्री है, सामग्री के लिए संकेत नहीं। हालांकि यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, लेकिन उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर होगा । धन्यवाद!
क्रिस एस

8
ठीक है, मैंने अपनी पाँच वर्षीय पोस्ट को एक उदाहरण के साथ अद्यतन किया है :)
थॉमस

1
निष्पक्ष होने के लिए, 5 साल पुराना है या नहीं, तर्क यह है कि आप जिस बिंदु को इंगित करते हैं वह गायब हो सकता है, जो बाद में जानकारी की तलाश में आने वाले किसी व्यक्ति को ज्यादातर या पूरी तरह से बेकार कर देता है। इसलिए मैंने वास्तव में आपके भद्दे कमेंट (ईमानदार) को वोट दिया, लेकिन मैं भी पूरी तरह से सहमत हूं कि जवाब में कुछ संदर्भ होना चाहिए ताकि यह उपयोगी बना रहे। खासकर जब से इसे सही उत्तर के रूप में चिह्नित किया गया है।
क्रेग

मुझे नहीं लगता कि एसओ / एसएफ समुदाय सिर्फ एक लिंक के बारे में सख्त था और "lmgtfy" फिर से जवाब देता है। लेकिन मैं सहमत हूं; एक पूर्वव्यापी संपादन किसी भी समय समझ में आता है।
थॉमस

किस विन्यास फ़ाइल में मैं उस निर्देशात्मक कथन को जोड़ूंगा?
डान कार्टर

8

वैश्विक कॉन्फ़िगरेशन में आप उपयोग कर सकते हैं:

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

इसी तरह आप सुरक्षित निर्देशिका पेड़ की पहली निर्देशिका में .htaccess फ़ाइल का उपयोग कर सकते हैं:

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

पिछले एक भी वैश्विक या आभासी मेजबान विन्यास में एक निर्देशिका निर्देश के अंदर रखा जा सकता है।


HTTPS में HTTP को रीडायरेक्ट करने से आप कुछ प्रकार के MiTM हमलों के लिए खुल जाते हैं। बस एक सावधानी।
क्रेग

1

वैकल्पिक रूप से, आप अपाचे के कॉन्फ़िगरेशन विकल्पों (यदि, शायद, आपके पास सर्वर के कॉन्फ़िगरेशन तक पहुंच नहीं है) का उपयोग करने के बजाय, आपके लिए प्रसंस्करण करने के लिए सर्वर-साइड भाषा का उपयोग कर सकते हैं।

उदाहरण के लिए, PHP के साथ:

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

(हालांकि बस जागरूक रहें - यदि आप Microsoft IIS पर ISAPI का उपयोग कर रहे हैं, यदि अनुरोध HTTPS के माध्यम से रूट नहीं किया जा रहा है, तो $ _SERVER ['HTTPS'] चर का मान "बंद" होगा)


1

किसी ने SSLRequireSSL का उल्लेख किया है, लेकिन मुझे नहीं लगता कि यह अपने आप काम करता है और मुझे इसके साथ एक सफल उदाहरण नहीं मिला है। अनुशंसित तरीका https://wiki.apache.org/httpd/RedirectSSL है जिसे मैंने लागू किया है और यह अच्छी तरह से काम करता है!


0

मान लें कि आप VirtualHost निर्देशों का उपयोग कर रहे हैं,

गैर-एसएसएल वर्चुएलहोस्ट में एक निर्देशिका निर्देश को पहुंच से वंचित रखें।

उसके बाद, ssl virtualhost पहुंच प्रदान करने में एक निर्देशिका निर्देश रखें।


0

मैंने हमेशा एक .htaccess फ़ाइल में इस mod_rewrite को किया है, हालाँकि आपको इसे अपनी मुख्य कॉन्फिग फ़ाइल में भी करने में सक्षम होना चाहिए।

यहां ऐसा करने के कुछ तरीकों के साथ एक मार्गदर्शिका दी गई है: स्मार्ट HTTP और HTTPS रिवाइटर्यूल रीडायरेक्ट

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.