यह बिल्ट इन डेवलपमेंट सर्वर की तरह सरल नहीं है, लेकिन अपने ब्राउजर और डेवलपमेंट सर्वर के बीच एक SSLizing बिचौलिया के रूप में stunnel का उपयोग करते हुए कुछ पास प्राप्त करना बहुत कठिन नहीं है। Stunnel आपको अपनी मशीन पर एक हल्का सर्वर सेट करने की अनुमति देता है जो एक कॉन्फ़िगर किए गए पोर्ट पर कनेक्शन स्वीकार करता है, उन्हें एसएसएल के साथ लपेटता है, और उन्हें किसी अन्य सर्वर पर भेजता है। हम इसका उपयोग एक स्टनलाइन पोर्ट (8443) खोलने के लिए और किसी भी ट्रैफ़िक के साथ इसे प्राप्त करने के लिए करेंगे जो कि एक Django रनवेस्टर उदाहरण के लिए प्राप्त होता है।
सबसे पहले आपको स्टनलाइन की आवश्यकता होगी जिसे यहां डाउनलोड किया जा सकता है या आपके प्लेटफॉर्म के पैकेज सिस्टम (जैसे :) द्वारा प्रदान किया जा सकता है apt-get install stunnel
। मैं stunnel के संस्करण 4 का उपयोग कर रहा हूँ (उदाहरण के लिए: /usr/bin/stunnel4
Ubuntu पर), संस्करण 3 भी काम करेगा, लेकिन विभिन्न कॉन्फ़िगरेशन विकल्प हैं।
आवश्यक कॉन्फ़िगरेशन फ़ाइलों और SSLish सामान को रखने के लिए पहले अपने Django प्रोजेक्ट में एक निर्देशिका बनाएँ।
mkdir stunnel
cd stunnel
आगे हमें SSL संचार के लिए एक स्थानीय प्रमाणपत्र और कुंजी बनाने की आवश्यकता होगी। इसके लिए हम ओप्सनल को चालू करते हैं।
कुंजी बनाएँ:
openssl genrsa 1024 > stunnel.key
इस कुंजी का उपयोग करने वाला प्रमाण पत्र बनाएं (यह आपको सूचना का एक गुच्छा देगा जो सर्टिफिकेट में शामिल किया जाएगा - जो भी आपको अच्छा लगे, उसके साथ उत्तर दें):
openssl req -new -x509 -nodes -sha1 -days 365 -key stunnel.key > stunnel.cert
अब इन्हें एक सिंगल फाइल में संयोजित करें, जो stunnel अपने SSL संचार के लिए उपयोग करेगी:
cat stunnel.key stunnel.cert > stunnel.pem
निम्नलिखित सामग्री के साथ dev_https नामक stunnel के लिए एक विन्यास फ़ाइल बनाएँ:
pid=
cert = stunnel/stunnel.pem
sslVersion = SSLv3
foreground = yes
output = stunnel.log
[https]
accept=8443
connect=8001
TIMEOUTclose=1
यह फ़ाइल स्टनल को बताती है कि उसे क्या जानना है। विशेष रूप से, आप इसे पीआईडी फ़ाइल का उपयोग नहीं करने के लिए कह रहे हैं, जहां प्रमाणपत्र फ़ाइल है, एसएसएल के किस संस्करण का उपयोग करना है, यह अग्रभूमि में चलना चाहिए, जहां इसे अपना आउटपुट लॉग करना चाहिए, और यह पोर्ट पर कनेक्शन स्वीकार करना चाहिए। 8443 और उन्हें 8001 पोर्ट करने के लिए शटल करें। अंतिम पैरामीटर (TIMEOUTclose) इसे बताता है कि 1 सेकंड के बाद कोई गतिविधि नहीं होने के बाद कनेक्शन को स्वचालित रूप से बंद कर दें।
अब अपने Django प्रोजेक्ट डायरेक्टरी में पॉप-अप करें (इसमें मैनेजमेक्स के साथ एक):
cd ..
यहां हम एक स्क्रिप्ट बनाएंगे जिसका नाम रनसर है जो स्टनलाइन और दो डेंजो डेवलपमेंट सर्वर (सामान्य कनेक्शन के लिए एक, और एसएसएल कनेक्शन के लिए एक) चलाएगा:
stunnel4 stunnel/dev_https &
python manage.py runserver&
HTTPS=1 python manage.py runserver 8001
आइए इसे तोड़ते हैं, लाइन-बाय-लाइन:
- पंक्ति 1: स्टनलाइन शुरू करता है और इसे कॉन्फ़िगरेशन फ़ाइल में इंगित करता है जिसे हमने अभी बनाया है। इसमें पोर्ट 8443 पर स्टनलाइन श्रवण है, एसएसएल में इसे प्राप्त होने वाले किसी भी कनेक्शन को लपेटें, और उन्हें 8001 पोर्ट पर पास करें
- पंक्ति 2: एक सामान्य Django रनवेस्टर आवृत्ति (पोर्ट 8000 पर) प्रारंभ करता है
- पंक्ति 3: एक और Django रनअवर इंस्टेंस (पोर्ट 8001 पर) शुरू करता है और इसे आने वाले सभी कनेक्शनों के इलाज के लिए कॉन्फ़िगर करता है जैसे कि वे HTTPS का उपयोग करके किए जा रहे थे।
रनस्क्रिप्ट फ़ाइल बनाएं जिसे हमने अभी-अभी निष्पादन योग्य बनाया है:
chmod a+x runserver
अब जब आप अपना डेवलपमेंट सर्वर चलाना चाहते हैं तो ./runserver
अपने प्रोजेक्ट डायरेक्टरी से निष्पादित करें। इसे आज़माने के लिए, बस अपने ब्राउज़र को HTTP: // localhost: 8000 पर सामान्य HTTP ट्रैफ़िक के लिए इंगित करें , और HTTPS ट्रैफ़िक के लिए https: // localhost: 8443 । ध्यान दें कि आप ब्राउज़र का उपयोग किए गए प्रमाणपत्र के बारे में लगभग निश्चित रूप से शिकायत करेंगे और आपको अपवाद जोड़ने की आवश्यकता होगी या अन्यथा ब्राउज़र को ब्राउज़िंग जारी रखने के लिए स्पष्ट रूप से निर्देश दें। ऐसा इसलिए है क्योंकि आपने अपना प्रमाण पत्र बनाया है और यह ब्राउज़र द्वारा विश्वसनीय नहीं है कि वह किसके बारे में सच कह रहा है। यह विकास के लिए ठीक है, लेकिन जाहिर है कि यह उत्पादन के लिए कटौती नहीं करेगा।
दुर्भाग्य से, मेरी मशीन पर यह रनसर स्क्रिप्ट स्क्रिप्ट से बाहर नहीं निकलती है, जब मैं Ctrl-C मारता हूं। मुझे मैन्युअल रूप से प्रक्रियाओं को मारना होगा - किसी को भी इसे ठीक करने का सुझाव है?
संदर्भ सामग्री के लिए माइकल गिले के पोस्ट और django- बुनाई की विकी प्रविष्टि के लिए धन्यवाद ।