【Python Django】常時SSL対応 + セキュリティ設定

【Python Django】常時SSL対応 + セキュリティ設定


# django # python # ssl

皆さんこんにちは、今日は死ぬほど苦労した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などもセキュアにやり取りをするための設定がありますので、ここらへんもきちんと追加しておきます。

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True

Djangoは静的ファイルを直接参照することが出来ないので、通常のURLや静的ファイルと同じように明示する必要がある。

CERT_ROOT = os.path.join(BASE_DIR, '.well-known')
CERT_URL = '/.well-known/'
urlpatterns += static(settings.CERT_URL, document_root=settings.CERT_ROO

サーバーにssh接続して、httpsサービスの有効化を忘れずに行うこと!!自分はこれのせいで数時間持ってかれました…

firewall-cmd --add-service=https --zone=public --permanent
firewall-cmd --reload

 

やっぱりサーバーの設定とかその付近は難しいですなあ…