O değil olarakYerleşik geliştirme sunucusu basit , ancak tarayıcınız ile geliştirme sunucusu arasında bir SSLleştirici aracı olarak stunnel kullanarak bir şeyi yakınlaştırmak çok da zor değil. Stunnel, makinenizde yapılandırılmış bir bağlantı noktasındaki bağlantıları kabul eden, bunları SSL ile saran ve başka bir sunucuya ileten hafif bir sunucu kurmanıza olanak tanır. Bunu bir stunnel bağlantı noktasını (8443) açmak ve aldığı trafiği bir Django çalıştırma sunucusu örneğine geçirmek için kullanacağız.
Öncelikle buradan indirilebilecek veya platformunuzun paket sistemi tarafından sağlanabilecek (örneğin :) stunnel'e ihtiyacınız olacak apt-get install stunnel
. Stunnel'ın 4. sürümünü kullanacağım (örneğin: /usr/bin/stunnel4
Ubuntu'da), sürüm 3 de çalışacak, ancak farklı yapılandırma seçeneklerine sahip.
Öncelikle Django projenizde gerekli yapılandırma dosyalarını ve SSLish öğelerini tutmak için bir dizin oluşturun.
mkdir stunnel
cd stunnel
Daha sonra, SSL iletişimi için kullanılacak yerel bir sertifika ve anahtar oluşturmamız gerekecek. Bunun için openssl'ye dönüyoruz.
Anahtarı oluşturun:
openssl genrsa 1024 > stunnel.key
Bu anahtarı kullanan sertifikayı oluşturun (bu size sertifikaya dahil edilecek bir dizi bilgi soracaktır - sadece size iyi gelen her şeyi yanıtlayın):
openssl req -new -x509 -nodes -sha1 -days 365 -key stunnel.key > stunnel.cert
Şimdi bunları, stunnel'ın SSL iletişimi için kullanacağı tek bir dosyada birleştirin:
cat stunnel.key stunnel.cert > stunnel.pem
Aşağıdaki içeriğe sahip dev_https adlı stunnel için bir yapılandırma dosyası oluşturun:
pid=
cert = stunnel/stunnel.pem
sslVersion = SSLv3
foreground = yes
output = stunnel.log
[https]
accept=8443
connect=8001
TIMEOUTclose=1
Bu dosya stunnel'a bilmesi gerekenleri söyler. Spesifik olarak, bir pid dosyası kullanmamasını, sertifika dosyasının nerede olduğunu, hangi SSL sürümünü kullanacağını, ön planda çalışması gerektiğini, çıktısını nereye kaydetmesi gerektiğini ve bağlantı noktasında bağlantıyı kabul etmesi gerektiğini söylüyorsunuz. 8443 ve bunları 8001 numaralı bağlantı noktasına götürün. Son parametre (TIMEOUTclose), herhangi bir etkinlik olmadan 1 saniye geçtikten sonra bağlantıyı otomatik olarak kapatmasını söyler.
Şimdi Django proje dizininize geri dönün (içinde manage.py bulunan):
cd ..
Burada, stunnel ve iki django geliştirme sunucusunu çalıştıracak runserver adında bir betik oluşturacağız (biri normal bağlantılar için, diğeri SSL bağlantıları için):
stunnel4 stunnel/dev_https &
python manage.py runserver&
HTTPS=1 python manage.py runserver 8001
Bunu satır satır parçalayalım:
- Satır 1: Stunnel'ı başlatır ve onu az önce oluşturduğumuz yapılandırma dosyasına yönlendirir. Bu, 8443 numaralı bağlantı noktasında stunnel dinlemeye sahiptir, aldığı tüm bağlantıları SSL olarak sarar ve 8001 numaralı bağlantı noktasına iletir.
- Satır 2: Normal bir Django çalıştırma sunucusu örneği başlatır (8000 numaralı bağlantı noktasında)
- Satır 3: Başka bir Django çalıştırma sunucusu örneğini (bağlantı noktası 8001'de) başlatır ve onu gelen tüm bağlantıları HTTPS kullanılarak gerçekleştiriliyormuş gibi ele alacak şekilde yapılandırır.
Yeni oluşturduğumuz runscript dosyasını şununla çalıştırılabilir yapın:
chmod a+x runserver
Şimdi, geliştirme sunucunuzu çalıştırmak istediğinizde, sadece ./runserver
proje dizininizden çalıştırın . Denemek için, tarayıcınızı normal HTTP trafiği için http: // localhost: 8000'e ve HTTPS trafiği için https: // localhost: 8443'e yönlendirmeniz yeterlidir . Tarayıcınızın kullanılan sertifika hakkında neredeyse kesinlikle şikayet edeceğini ve bir istisna eklemenizi veya tarayıcıya göz atmaya devam etmesi için açıkça talimat vermenizi gerektireceğini unutmayın. Bunun nedeni, kendi sertifikanızı oluşturmuş olmanız ve tarayıcının sertifikanın kim olduğu hakkında gerçeği söylediğine güvenilmemesidir. Bu geliştirme için iyidir, ancak belli ki üretim için kesmeyecektir.
Ne yazık ki, makinemde Ctrl-C'ye bastığımda bu çalıştırma sunucusu betiği güzelce çıkmıyor. İşlemleri manuel olarak sonlandırmam gerekiyor - bunu düzeltmek için bir önerisi olan var mı?
Michael Gile'nin gönderisi ve django-weave'in referans materyal için wiki girişi sayesinde.