皆さんこんにちは、今日は死ぬほど苦労したDjangoのSSL設定について備忘録を書いておきたいと思います。(絶対また死ぬほど苦労する
。)
とはいえここら辺のサイトをきちんと見てやれば問題ないはずなのですけどね。
フレームワーク使わないページとは設定が異なるので、途中までやってたら1からきちんとやり直したほうが99%早いです。
環境
Python:3.6
Django:2.1
Apache:2.2
参考サイト
「https」で表示するまでのDjango・Apacheの設定
・https://gyobot.com/blog/detail/7/
・https://hombre-nuevo.com/vps/vps0024/
Djangoのセキュリティ設定
・https://qiita.com/__init__/items/bb9d8f160747ead381d7
Django公式のセキュリティ関連のページ
・https://docs.djangoproject.com/ja/2.1/topics/security/#ssl-https
設定の抜粋とメモ
Django側でhttpからhttpsへのリダイレクトを設定することが可能です。
Apache側で特別記載をせずとも、リダイレクトをしてくれます。
また、その他にもCookieなどもセキュアにやり取りをするための設定がありますので、ここらへんもきちんと追加しておきます。
1 2 3 4 |
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') SECURE_SSL_REDIRECT = True SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True |
Djangoは静的ファイルを直接参照することが出来ないので、通常のURLや静的ファイルと同じように明示する必要がある。
1 2 |
CERT_ROOT = os.path.join(BASE_DIR, '.well-known') CERT_URL = '/.well-known/' |
1 |
urlpatterns += static(settings.CERT_URL, document_root=settings.CERT_ROO |
サーバーにssh接続して、httpsサービスの有効化を忘れずに行うこと!!自分はこれのせいで数時間持ってかれました…
1 2 |
firewall-cmd --add-service=https --zone=public --permanent firewall-cmd --reload |
やっぱりサーバーの設定とかその付近は難しいですなあ…