2010-12-22 14 views
5

को बल दें मैं सोच रहा हूं कि HTTPS प्रमाणीकरण को बल देने का सबसे अच्छा तरीका क्या है।निर्देशिका पर HTTPS को कैसे बल दें और HTTPS प्रमाणीकरण

जब मैं अपने .htaccess फाइल में इस है:

AuthType Basic 
AuthName "Developer" 
AuthUserFile /usr/local/etc/apache22/passwords/passwords 
Require user david 

प्रमाणीकरण काम करता है, लेकिन यह पोर्ट 80 पर प्रमाणित करता है, स्पष्ट में पासवर्ड भेज दिया।

तो मैं मैं बराबर HTTPS अनुरोध करने के लिए सभी गैर HTTPS अनुरोध रीडायरेक्ट करने के लिए रीडायरेक्ट नियम जोड़ना होगा लगा:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteBase /~david/ 
RewriteRule ^(.*)$ https://myserver.tld/~david/$1 [R,L] 

यह भी काम करता है, लेकिन पोर्ट 80 पर यह पहली authenicates, तो पुनर्निर्देश, उसके बाद फिर से authenicates पोर्ट 443 पर। मैं पोर्ट 80 पर प्रमाणीकरण नहीं करना चाहता, क्योंकि पासवर्ड स्पष्ट पाठ में भेजा जाएगा। मैं तुरंत HTTPS पर रीडायरेक्ट करने के लिए एक अच्छा तरीका समझने में सक्षम नहीं हूं, और फिर स्वाभाविक रूप से।

<?php 

header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); 

?> 

यह वह जगह है: अपने सर्वर की/पर

AuthType Basic 
AuthName "Developer" 
AuthUserFile /usr/local/etc/apache22/passwords/passwords 
Require user david 
ErrorDocument 403 /403.php 
SSLRequireSSL 

और एक 403.php PHP स्क्रिप्ट होने:

एक ही रास्ता मैं ऐसा करने के तरीके समझ सकता है ऐसा करने से है वांछित व्यवहार। इसे एसएसएल की आवश्यकता है, इसलिए जब आप पोर्ट 80 पर निर्देशिका तक पहुंचने का प्रयास करते हैं, तो यह एक कस्टम त्रुटि दस्तावेज़ थूकता है, और वह दस्तावेज़ पृष्ठ को HTTPS पर रीडायरेक्ट करने के लिए करता है।

यह एक क्लज की तरह लगता है। क्या इसे पूरा करने का कोई बेहतर तरीका है?

+0

मुझे लगता है कि आपको यह सही मिला है। यह सबसे अच्छा तरीका है। – bmb

उत्तर

13

तो आपके पास यह मुद्दा यह है कि आपका या ब्लॉक अभी HTTPS और HTTP केस दोनों पर लागू होता है। आपको इसे उलझाने की ज़रूरत है (वास्तव में - आप 'किसी भी संतुष्ट' का भी उपयोग कर सकते हैं - लेकिन यह इस मामले में थोड़ा गन्दा है)।

<VirtualHost *:80> 
    ... 
    RewriteRule ^/foo/bar/?(.*)$ https://myserver.tld/foo/bar/$1 [R,L] 
    # and to guard against typo's... 
    <Directory /foo/bar/> 
     deny from all 
    </Directory> 
</VirtualHost> 


<VirtualHost *:443> 
    ... 
    <Directory /foo/bar/> 
     BasicAuth .. etc. 
     allow from all 
    </Directory> 
</VirtualHost> 

और वहाँ से बातें ले:

डिबग करने का एक आसान/दृष्टिकोण को समझने की तरह एक संरचना करने के लिए जाना है।

डीडब्ल्यू।