'রানসারভার' ব্যবহার করে আমি https সংযোগগুলি কীভাবে সহজেই জ্যাঙ্গোর সাথে পরীক্ষা করতে পারি?


109

আমার একটি অ্যাপ্লিকেশন রয়েছে যা "সুরক্ষিত" কুকি ব্যবহার করে এবং একটি জটিল এসএসএল সক্ষম বিকাশ সার্ভার সেট আপ করার প্রয়োজন ছাড়াই এর কার্যকারিতা পরীক্ষা করতে চাই। আমি নন-এনক্রিপ্ট করা অনুরোধগুলি যেমন পরীক্ষা করতে পারি ঠিক তেমন করার কোনও উপায় আছে কি ./manage.py runserver?


সার্ভারটি পোর্ট 443 এ চালানোর জন্য আপনি কেবল 443 রানসরভার নির্দিষ্ট করতে পারবেন না?
Furbeenator

@ ফুরবেনেটর: দুর্ভাগ্যক্রমে নয় - এটি 443-তে সার্ভারের এইচটিটিপি তৈরি করবে, আমার যা প্রয়োজন এটি একটি আসল এসএসএল সার্ভার চলছে।
ইভান গ্রিম

উত্তর:


109

এটি বিল্ট ইন ডেভলপমেন্ট সার্ভারের মতো সহজ নয় , তবে আপনার ব্রাউজার এবং বিকাশ সার্ভারের মধ্যে এসএসএলাইফিং মিডলম্যান হিসাবে স্টানেল ব্যবহার করে কিছু কাছাকাছি পাওয়া খুব কঠিন নয়। স্টানেল আপনাকে আপনার মেশিনে একটি হালকা ওজনের সার্ভার সেট আপ করতে দেয় যা একটি কনফিগার করা বন্দরে সংযোগ গ্রহণ করে, এসএসএল দিয়ে মুড়িয়ে দেয় এবং এগুলি অন্য কোনও সার্ভারে প্রেরণ করে। আমরা এটি একটি স্টানেল পোর্ট খোলার জন্য (8443) ব্যবহার করব এবং এটি জ্যাঙ্গো রানসরভারের দৃষ্টান্তে যে কোনও ট্র্যাফিক পাবে তা পেরিয়ে যাব।

প্রথমে আপনার স্টানেল লাগবে যা এখানে ডাউনলোড করা যেতে পারে বা আপনার প্ল্যাটফর্মের প্যাকেজ সিস্টেম (যেমন apt-get install stunnel:) দ্বারা সরবরাহ করা যেতে পারে । আমি স্ট্যান্ডেলের ৪ র্থ সংস্করণ (উদাহরণস্বরূপ: /usr/bin/stunnel4উবুন্টুতে) ব্যবহার করব , সংস্করণ ৩ টিও কাজ করবে, তবে বিভিন্ন কনফিগারেশন বিকল্প রয়েছে।

প্রয়োজনীয় কনফিগারেশন ফাইল এবং এসএসএলিশ স্টাফ রাখার জন্য প্রথমে আপনার জ্যাঙ্গো প্রকল্পে একটি ডিরেক্টরি তৈরি করুন।

mkdir stunnel
cd stunnel

এর পরে এসএসএল যোগাযোগের জন্য আমাদের একটি স্থানীয় শংসাপত্র এবং কী তৈরি করতে হবে। এটির জন্য আমরা ওপেনএসএলে পরিণত করি।

কীটি তৈরি করুন:

openssl genrsa 1024 > stunnel.key

এই কীটি ব্যবহার করে এমন শংসাপত্র তৈরি করুন (এটি আপনাকে সার্টিফিকেটে অন্তর্ভুক্ত করা হবে এমন একগুচ্ছ তথ্য জিজ্ঞাসা করবে - যা আপনার ভাল লাগবে তার উত্তর দিন):

openssl req -new -x509 -nodes -sha1 -days 365 -key stunnel.key > stunnel.cert

এখন এগুলিকে একটি একক ফাইলে সংযুক্ত করুন যা স্ট্রান্ডেল তার এসএসএল যোগাযোগের জন্য ব্যবহার করবে:

cat stunnel.key stunnel.cert > stunnel.pem

নিম্নলিখিত বিষয়বস্তুগুলির সাথে dev_https নামে স্টান্ডেলের জন্য একটি কনফিগার ফাইল তৈরি করুন:

pid=

cert = stunnel/stunnel.pem
sslVersion = SSLv3
foreground = yes
output = stunnel.log

[https]
accept=8443
connect=8001
TIMEOUTclose=1

এই ফাইলটি যা জানতে হবে তা স্টানেলকে বলে। বিশেষত, আপনি এটিকে পিড ফাইলটি ব্যবহার না করার জন্য বলছেন, যেখানে শংসাপত্রের ফাইলটি রয়েছে, এসএসএলের কোন সংস্করণ ব্যবহার করা উচিত, এটির অগ্রভাগে চালানো উচিত, যেখানে এটির আউটপুট লগ হওয়া উচিত, এবং এটি পোর্টের সাথে সংযোগ গ্রহণ করা উচিত ৮৪৩৩ এবং এটিকে 8001 পোর্টে শাটল করুন The শেষ প্যারামিটারটি (টিআইএমইইউস্লোস) এটি কোনও ক্রিয়াকলাপ না করে 1 সেকেন্ড পেরিয়ে যাওয়ার পরে সংযোগটি স্বয়ংক্রিয়ভাবে বন্ধ করতে বলে।

এখন আপনার জ্যাঙ্গো প্রকল্প ডিরেক্টরিতে ব্যাক আপ করুন (এটিতে ম্যানেজ.পি সহ একটি):

cd ..

এখানে আমরা রানসারভার নামে একটি স্ক্রিপ্ট তৈরি করব যা স্টানেল এবং দুটি জ্যাঙ্গো ডেভলপমেন্ট সার্ভার চালাবে (একটি সাধারণ সংযোগের জন্য এবং একটি এসএসএল সংযোগের জন্য):

stunnel4 stunnel/dev_https &
python manage.py runserver&
HTTPS=1 python manage.py runserver 8001

একে একে একে একে একে একে ভাঙ্গি:

  • লাইন 1: স্ট্যান্ডেল শুরু করে এবং এটি সুনির্দিষ্টভাবে তৈরি করা কনফিগারেশন ফাইলের দিকে নির্দেশ করুন। এটিতে ৮৪৪৪ বন্দরটিতে টানাপোড়া শোনার সুযোগ রয়েছে, এসএসএলে প্রাপ্ত কোনও সংযোগ এটি মোড়ানো এবং 8001 বন্দরে বরাবর দিয়ে দিন
  • লাইন 2: একটি সাধারণ জ্যাঙ্গো রানসরভার দৃষ্টান্ত শুরু করে (8000 পোর্টে)
  • লাইন 3: আরেকটি জ্যাঙ্গো রানসরভার দৃষ্টান্তটি (8001 পোর্টে) আরম্ভ করে এবং সমস্ত আগত সংযোগগুলি যেমন এইচটিটিপিএস ব্যবহার করে সম্পাদন করা হচ্ছে তার জন্য এটি কনফিগার করে।

আমরা স্রেফ তৈরি করা রানস্ক্রিপ্ট ফাইলটি এটিকে সম্পাদনযোগ্য করে তুলুন:

chmod a+x runserver

এখন আপনি যখন আপনার বিকাশ সার্ভারটি চালাতে চান তখন কেবল ./runserverআপনার প্রকল্প ডিরেক্টরি থেকে চালিত করুন । এটি চেষ্টা করার জন্য, কেবলমাত্র আপনার ব্রাউজারটি HTTP: // লোকালহোস্ট: 8000 এ সাধারণ HTTP ট্র্যাফিকের জন্য এবং HTTPS ট্র্যাফিকের জন্য https: // লোকালহোস্ট: 8443 এ নির্দেশ করুন । মনে রাখবেন যে আপনি ব্রাউজারটি অবশ্যই ব্যবহার করা শংসাপত্র সম্পর্কে অভিযোগ করবে এবং আপনাকে একটি ব্যতিক্রম যুক্ত করতে হবে বা অন্যথায় ব্রাউজারটি চালিয়ে যাওয়ার জন্য স্পষ্টভাবে নির্দেশ দিন। এটি কারণ আপনি নিজের শংসাপত্র তৈরি করেছেন এবং এটি কে সে সম্পর্কে সত্য বলার জন্য এটি ব্রাউজারের দ্বারা বিশ্বাসযোগ্য নয়। এটি উন্নয়নের জন্য সূক্ষ্ম, তবে অবশ্যই এটি উত্পাদন জন্য কাটা হবে না।

দুর্ভাগ্যক্রমে, আমার মেশিনে যখন আমি সিটিআরএল-সি মারি তখন এই রানসারভার স্ক্রিপ্টটি ভালভাবে বেরিয়ে আসে না। আমাকে প্রক্রিয়াগুলি নিজেই মেরে ফেলতে হবে - কারও কাছে এটি ঠিক করার জন্য কোনও পরামর্শ আছে?

তথ্যসূত্রের জন্য মাইকেল গিলের পোস্ট এবং জাঙ্গো-ওয়েভের উইকি প্রবেশের জন্য ধন্যবাদ।


3
আমি কেবল এই উত্তরে হোঁচট খেয়েছি। কিছু মন্তব্য: আপনার অগত্যা 8001-তে পৃথক বিকাশের উদাহরণ চালানোর দরকার নেই, আপনি এটি 8000 পোর্টের সাথে সংযোগও করতে পারেন you আপনি যদি স্টানেলটি স্বয়ংক্রিয়ভাবে হত্যা করতে চান তবে একটি ফাংশন এবং একটি প্রস্থান ট্র্যাপ যুক্ত করুন: কিল_স্টুনেল () কিল $ স্টানেল_পিড} ট্র্যাপ কিল_স্টানেল প্রস্থান স্টানেল 4 স্টানেল / দেব https & স্টানেল_পিড = $ 1
শুক্র

2
দ্বিতীয় উদাহরণটি এইচটিটিপিএস = 1 দিয়ে অনুরোধ করা হয়েছে যার অর্থ request.is_secure()রিপোর্ট করা হবে True। যদি আপনার এটির প্রয়োজন না হয় তবে আপনি ঠিক বলেছেন - আপনি একক উদাহরণে কেবল স্টানেলটি নির্দেশ করতে পারেন।
ইভান গ্রিম

যদি আপনি স্টানাল ফিপস মোডে চালিত করেন তবে এটি সমর্থিত নয় .... এটিকে বন্ধ করার জন্য দেব_এইচটিপিএস ফাইলটিতে ফিপস = নেই যোগ করুন
ইয়েহডিক্সন

2
আমি এটি চেষ্টা করেছি কারণ আমি অন্য কারও দ্বারা বিকাশিত কোনও প্রকল্পের কোনও সাইটের সাইটের কাজের কপি স্থাপন করার চেষ্টা করছি তবে আমি পাচ্ছি "sslVersion = SSLv3": SSLv3 not supported
হেনরিএম

@ ফ্রিক stunnel_pid=$1আমার পক্ষে কাজ করেনি তবে stunnel_pid=$!করেছে। আপনার জন্য কিভাবে stunnel_pid=$1কাজ করে?
উত্কু

86

আমি জ্যাঙ্গো-এস্লসভার প্যাকেজটি ব্যবহার করার পরামর্শ দেব ।

পাইপআই-তে বর্তমান প্যাকেজটি কেবল জাঙ্গো সংস্করণ 1.5.5 পর্যন্ত সমর্থন করে তবে একটি প্যাচ 5d4664c এর মাধ্যমে প্রতিশ্রুতিবদ্ধ । এই ঠিক করার সাথে সাথে সিস্টেমটি ভালভাবে চলে এবং https সংযোগের পরীক্ষা করার জন্য একটি সহজ এবং সরল সমাধান ward

আপডেট: যেহেতু আমি আমার উত্তর পোস্ট করেছি উপরের প্রতিশ্রুতি মাস্টার শাখায় একীভূত হয়ে গেছে এবং পিপিআইতে একটি নতুন প্রকাশ করা হয়েছে। সুতরাং সেই নির্দিষ্ট ফিক্সের জন্য 5d4664c কমিট নির্দিষ্ট করার দরকার নেই।


5
এটি আশাব্যঞ্জক বলে মনে হচ্ছে - আমাকে এটির উত্তর স্বীকার করতে হবে। অন্য কেউ ওজন করতে চান?
ইভান গ্রিম

3
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, একটি বেশ জটিল প্রকল্পে কিছু সময়ের জন্য ব্যবহৃত যা https এ চালানো ছাড়া কাজ করতে পারে না এবং কখনও সমস্যা হয় না।
সিমোন চিত্তাদিণী

2
ভাল কাজ করে ... ধন্যবাদ! :)
nid হাই

5
পাইথন 3.6.2 এবং জ্যাঙ্গো 1.11.3 হিসাবে কাজ করে।
ফিনিক্স

2
পাইথন 3.5 এবং জ্যাঙ্গো 1.11 হিসাবে কাজ করে
হ্যানসেল

64

জাজানো-এস্লসভারের মতোই আপনি জাজানো -এক্সটেনশানগুলি থেকে রানসারবারপ্লাস ব্যবহার করতে পারেন

ওয়ার্কজেগের উপর এটির নির্ভরতা রয়েছে (যাতে আপনি দুর্দান্ত ওয়ার্কজেগ ডিবাগারের অ্যাক্সেস পান) এবং পাইওপেনএসএসএল (কেবল এসএসএল মোডের জন্য প্রয়োজনীয়) রান ইনস্টল করার জন্য:

pip install django-extensions Werkzeug pyOpenSSL

আপনার প্রজেক্টের সেটিংস.পাই ফাইলটিতে এটি INSTALLED_APPS এ যুক্ত করুন:

INSTALLED_APPS = (
    ...
    'django_extensions',
    ...
)

তারপরে আপনি এসএসএল মোডে সার্ভারটি এর সাথে চালাতে পারেন:

./manage.py runserver_plus --cert /tmp/cert

এটি এতে একটি শংসাপত্র ফাইল /tmp/cert.crtএবং একটি মূল ফাইল তৈরি করবে /tmp/cert.keyযা তারপরে ভবিষ্যতের সেশনের জন্য পুনরায় ব্যবহার করা যেতে পারে।

জ্যাঙ্গো-এক্সটেনশনে অন্তর্ভুক্ত অতিরিক্ত জিনিসগুলির একটি গুচ্ছ রয়েছে যা আপনি ব্যবহারের সন্ধান করতে পারেন তাই ডক্সের মাধ্যমে দ্রুত ঝাঁকুনি রাখার উপযুক্ত।


2
আসলে জ্যাঙ্গো ১.6+ এর সর্বোত্তম উত্তর যেহেতু জ্যাঙ্গো-স্লাসভার নতুন সংস্করণের জন্য অটো-লোড সমর্থন করে না
Zat42

ডিবাগিং + এসটিএল সক্রিয় করার জন্য সেরা উত্তর।
ইউদা প্রবীরা

আমি অবাক হয়েছি কেন এটি ডকারের ধারক অ্যাপ্লিকেশনটিতে কাজ করে না
রোয়েল

@ রোয়েল এটিকে দ্রুত চেষ্টা করেছে এবং মনে হচ্ছে এটি হ্যালো ওয়ার্ল্ড অ্যাপ্লিকেশনটির জন্য কাজ করে। হতে পারে যে আপনার বেস ইমেজটির প্রয়োজনীয়তা নেই (উদাহরণস্বরূপ যদি আপনি -Papine ব্যবহার করেন) অথবা আপনার আইপি পরিসীমা উদ্বোধন করতে পারে যেমন./manage.py runserver_plus --cert /tmp/cert 0.0.0.0:8000
ডিজেসুথো

ফাইলনিটফাউন্ডএরর: [এর্নো ২] এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই: '/tmp\\cert.crt'
মার্ক অ্যান্টনি

38

শুধু ইনস্টল

sudo pip install django-sslserver

ইনস্টলড এপিএস-এ এসএসএলসিভার অন্তর্ভুক্ত করুন

INSTALLED_APPS = (...
"sslserver",
...
)

এখন আপনি চালাতে পারেন

 python manage.py runsslserver 0.0.0.0:8888

2
সবচেয়ে পরিষ্কার সমাধান!
সেক্সিবিস্ট

প্রকৃতপক্ষে একটি পরিষ্কার সমাধান, তবে কোনও কারণে এটি খুব ধীর
ভানু তেজ

হুঁ, ক্রোম একটি সতর্কতা দিচ্ছে যে শংসাপত্রটি অবৈধ।

@ জাজেজেড এটি কেবলমাত্র উন্নয়নের জন্য, সুতরাং এটি কিছু যায় আসে না।
শার্পলেস 512

এটি খুব মার্জিত - তবে নিরাপদ সংযোগ পরীক্ষা করার জন্য এটি ব্যবহার করার কোনও সমাধান আছে কি? প্রাক্তন হিসাবে, আপনি যদি ফেসবুক গ্রাফ এপিআইয়ের বিরুদ্ধে পরীক্ষা করতে চান? বিকাশকারী.ফেসবুক
ডকস

14

Https://ngrok.com/ এ সাইনআপ করুন । আপনি পরীক্ষার জন্য https ব্যবহার করতে পারেন। এটি কেবলমাত্র https টি দ্রুত পরীক্ষা করতে চান এমন লোকদের সহায়তা করতে পারে।


6
দ্রুত পরীক্ষার জন্য এটি দুর্দান্ত সমাধান। এবং আমাকে কোনও কিছুর জন্য সাইনআপ করতে হবে না, কেবল ডাউনলোড করে চালাতে হবে /
গাভকিলব্রাইড

4

ডিবাগিংয়ের উদ্দেশ্যে স্টানেল বিকল্পের একটি অগ্রণী সংস্করণ খুঁজছেন তাদের জন্য:

স্টানেল.পিএম হ'ল ইভান গ্রিমের শীর্ষ ভোট প্রাপ্ত উত্তরের মতো একটি শংসাপত্র।

443 পোর্টে সমস্ত স্থানীয় ইন্টারফেস শুনুন এবং লোকালহোস্টের 80 পোর্টে ফরোয়ার্ড করুন

sudo stunnel -f -p stunnel.pem -P ~/stunnel.pid -r localhost:80 -d 443

sudo কেবলমাত্র আগত পোর্টগুলির জন্য (-d [হোস্ট:] পোর্ট) 1024 এর অধীনে প্রয়োজনীয়


4
  1. এনগ্রোক ইনস্টল করুন। ডাউনলোড লিঙ্ক: https://ngrok.com/download
  2. টার্মিনালে নিম্নলিখিত কমান্ড জারি করুন

    ngrok http 8000

এটি এনগ্রোক সেশন শুরু করবে will এটি দুটি url তালিকাবদ্ধ করবে। একটিকে http: // লোকালহোস্ট: 8000 এ ম্যাপ করা হয়েছে । দ্বিতীয়টি https: // লোকালহোস্ট: 8000 এ ম্যাপ করা হয়েছে । নীচের স্ক্রিনশট চেক করুন। হয় ইউআরএল ব্যবহার করুন। এটি আপনার স্থানীয় সার্ভারে মানচিত্র তৈরি করবে।

নমুনা এনগ্রোক সেশন স্ক্রিনশট


সবচেয়ে সহজ উপায় এটা করতে কিন্তু নতুন HTTPS URL লাগাতে মনে রাখাallowed_host
Roel

2

এটি সকেটের সাথে এক লাইনে করা যেতে পারে:

socat openssl-listen:8443,fork,reuseaddr,cert=server.pem,verify=0 tcp:localhost:8000

যেখানে 8443 ইনকামিং এইচটিটিপিএস সংযোগ শোনার জন্য একটি বন্দর, সার্ভার.পিএম হ'ল একটি স্ব-স্বাক্ষরিত সার্ভার শংসাপত্র এবং লোকালহোস্ট: 8000 যথারীতি চালু করা একটি ডিবাগ এইচটিটিপি সার্ভার।

আরও বিশদ: http://www.dest-unreach.org/socat/doc/socat-openssltunnel.html


0

জ্যাঙ্গোর চেয়ে এনগিনেক্সের মতো প্রক্সি দিয়ে এসএসএল / টিএলএস হ্যান্ডেল করুন। 443 পোর্টে শুনার জন্য Nginx সেট আপ করা যেতে পারে এবং তারপরে আপনার জ্যাঙ্গো ডেভ সার্ভারে অনুরোধ জানানো হয় (সাধারণতhttp://127.0.0.1:8000 ) । এর জন্য একটি এনগিনেক্স কনফিগারেশন নিম্নলিখিতগুলির মতো দেখতে পারে:

server {
    listen 443 ssl;
    server_name django-dev.localhost;

    ssl_certificate /etc/ssl/certs/nginx_chain.pem;
    ssl_certificate_key /etc/ssl/private/nginx.pem;    

    location / {
        proxy_pass http://127.0.0.1:8000/;
        proxy_set_header Host $host;
    }
}

এছাড়াও মানচিত্রের করতে হবে django-dev.localhostকরতে 127.0.0.1যোগ django-dev.localhostকরার ALLOWED_HOSTSমধ্যে settings.py। লিনাক্সে, আপনাকে নিম্নলিখিত লাইনটি যুক্ত করতে হবে/etc/hosts :

127.0.0.1   django-dev.localhost

তারপরে https://django-dev.localhostআপনি আপনার ব্রাউজারে গিয়ে আপনার ডেভ সাইটে পৌঁছাতে সক্ষম হবেন (আপনার ব্রাউজারের সুরক্ষা সতর্কতাটি আপনাকে বাইপাস করতে হবে)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.