[解決済み] Django で https 接続を非 https 接続と同じように簡単にテストするには 'runserver' を使うには?
質問
私は "secure" Cookie を使用するアプリケーションを持っており、複雑な SSL 対応の開発サーバーをセットアップする必要なく、その機能をテストしたいと思っています。 これを、暗号化されていないリクエストを
./manage.py runserver
?
どのように解決するのですか?
これは として しかし、ブラウザと開発サーバーの間のSSL化仲介者としてstunnelを使うことで、近いものを得ることはそれほど難しくありません。 Stunnelは、設定されたポートで接続を受け入れ、SSLでそれらをラップし、他のサーバーにそれらを渡す、あなたのマシン上の軽量サーバーをセットアップすることを可能にします。 これを利用して、 stunnel ポート (8443) を開き、それが受け取るトラフィックを Django ランサーバインスタンスに渡します。
まず、 stunnel が必要です。
ここからダウンロードできます
または、あなたのプラットフォームのパッケージシステムによって提供されるかもしれません (例:
apt-get install stunnel
). 私はstunnelのバージョン4を使っています(例::
/usr/bin/stunnel4
Ubuntu上)、バージョン3も動作しますが、異なる設定オプションがあります。
まず、Django プロジェクトの中に、必要な設定ファイルや SSL 的なものを格納するためのディレクトリを作成します。
mkdir stunnel
cd stunnel
次に、SSL通信に使用するローカル証明書と鍵を作成する必要があります。 これにはopensslを使用します。
鍵を作成します。
openssl genrsa 2048 > stunnel.key
この鍵を使用する証明書を作成します (これは証明書に含まれる多くの情報を尋ねます。あなたが良いと思うものを選んで答えてください)。
openssl req -new -x509 -nodes -sha1 -days 365 -key stunnel.key > stunnel.cert
さて、これらを1つのファイルにまとめ、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
このファイルは、stunnelが何を知る必要があるかを伝えます。 具体的には、pidファイルを使用しないこと、証明書ファイルがどこにあるか、使用するSSLのバージョン、フォアグラウンドで実行すること、出力をどこに記録するか、ポート8443で接続を受け付け、ポート8001に転送すること、などを伝えているのです。 最後のパラメータ(TIMEOUTclose)は、何もせずに1秒経過した後に自動的に接続を閉じるように指示します。
Django のプロジェクトディレクトリ (manage.py があるディレクトリ) に戻ってください。
cd ..
ここでは、stunnel と 2 つの django 開発サーバ (通常の接続用と SSL 接続用) を実行する runserver という名前のスクリプトを作成します。
stunnel4 stunnel/dev_https &
python manage.py runserver&
HTTPS=1 python manage.py runserver 8001
これを一行ずつ分解してみましょう。
- 1行目。stunnelを起動し、先ほど作成した設定ファイルを指定します。 これは、stunnelにポート8443をリッスンさせ、受け取ったコネクションをSSLでラップし、ポート8001に渡します。
- 2行目。通常の Django ランサーバインスタンスを (ポート 8000 で) 起動します。
- 3行目 別の Django ランサーバインスタンス (ポート 8001) を起動し、すべての着信接続を HTTPS を使用して実行されているかのように扱うように設定します。
で先ほど作成した runScript ファイルを実行可能な状態にします。
chmod a+x runserver
これで、開発用サーバを実行するときは、単に
./runserver
を実行するだけです。 試しに、通常の HTTP トラフィックには http://localhost:8000 を、HTTPS トラフィックには https://localhost:8443 をブラウザに指定してみてください。 ブラウザは間違いなく、使用されている証明書について文句を言い、ブラウジングを続けるために例外を追加するか、ブラウザに明示的に指示することを要求することに注意してください。 これは、あなたが独自の証明書を作成し、それが誰であるかについて真実を語っていることをブラウザが信頼していないためです。 これは、開発には適していますが、実運用には適していないことは明らかです。
残念ながら、私のマシンでは、Ctrl-C を押したときに、この runserver スクリプトがうまく終了しません。 プロセスを手動で終了させなければなりません。
関連
-
Django でチェックボックスの値を取得する方法
-
Django。"makemigrations "時に変更が検出されない。
-
Django QuerySet マルチテーブル結合/条件付きピッキング/マージ
-
Django ForeignKey逆引きクエリにおけるfilterと_setの効率比較
-
[解決済み] Django のビューで 2 つ以上のクエリセットを結合するにはどうすればよいですか?
-
[解決済み] スケジュールされたジョブを設定する?
-
[解決済み] Django で完全な/絶対的な URL (ドメイン付き) を取得するにはどうすればよいですか?
-
[解決済み] 特定のレポにのみ GIT_SSL_NO_VERIFY を設定するにはどうすればよいですか?
-
[解決済み] 特定の接続で異なる証明書を使用するにはどうすればよいですか?
-
[解決済み] Django は静的ファイルの URL をビューで取得します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] pipと要件ファイルを使って、特定のパッケージをアップグレードするにはどうすればよいですか?
-
[解決済み] Django のフォームで、あるフィールドを編集できないように readonly (または disabled) にするにはどうしたらいいですか?
-
[解決済み] Djangoのテンプレートからsettings.pyの定数にアクセスすることは可能ですか?
-
[解決済み] Django の修正 管理者の複数形
-
[解決済み] django-rest-framework の管理者スタイルのブラウズ可能なインターフェイスを無効にする方法は?
-
[解決済み] Django のモデルで電話番号を保存する最良の方法は何ですか?
-
[解決済み] models.pyでDjangoの設定変数を参照するには?
-
[解決済み] Django が ManyToMany リレーションシップからオブジェクトを取り除く
-
[解決済み] Django: テンプレート内からセッション変数にアクセスする?
-
[解決済み] Django: Django のアプリを完全にアンインストールするには?