Let’s Encrypt という SSL サーバ証明書 を無料で発行してくれるサービスが、
「2016年4月12日 に Let’s Encrypt の正式サービスが開始しました。」
ということで、フリーで証明書の取得ができるようになったため、ブログの SSL 化を実施しました。
Blog なので、別にどっちで見てもらってもいいかなと思い、HTTP/HTTPS どちらでも通信できるようにしましたが、管理画面だけは、HTTPS での通信を強制させたいので、mezzanine の機能でできないか調べてみました。
追記
SSLRedirectMiddleware は、mezzanine を 4.2.2 から非推奨になり、削除予定です。
mezzanine/middleware.py at master · stephenmcd/mezzanine
理由は、Django 1.8 から SecurityMiddleware が追加されたため、機能が被ったためかと思います。
4.2.2 以降で project 再作成すると、settings.py SSLRedirectMiddleware の記述が削除されます。
4.2.3 でも SSLRedirectMiddleware は存在していて使用することはできますが、基本的に、SecurityMiddleware を使うほうがいいかと思います。
SecurityMiddleware については以下の記事と、slideshare が参考になります。
当記事の説明は、SSLRedirectMiddleware に関する内容になります。
2017/10/09 時点では mezzanine 使用することができますので、なんらかの事情で、SecurityMiddleware が使用できない場合、参考にして頂ければと思います。
Mezzanine の SSL 関連の機能
管理画面上にそれらしい機能があります。
画面には、「 SSL を使用」、「ホスト固定」 が表示されています。
画面表示されているのは、SSL_ENABLED、 SSL_FORCE_URL_PREFIXES の2つです。
ドキュメント を見る限り、SSL の設定関連項目は 4つあります。
以下 説明します。
SSL の設定関連項目
-
SSL_ENABLED
Trueの場合、SSL_FORCE_URL_PREFIXESで指定された URL を HTTPS にリダイレクトする。
デフォルト:False -
SSL_FORCED_PREFIXES_ONLY
Trueの場合、SSL_FORCE_URL_PREFIXESで指定された URL を HTTPS にリダイレクトし、指定された URL 以外の場合は、HTTP にリダイレクトする。
言いかえると、SSL_FORCE_URL_PREFIXESで指定された URL は HTTPS を強制し、SSL_FORCE_URL_PREFIXESの指定外 URL は HTTP を強制します。
デフォルト:True -
SSL_FORCE_HOST
HTTPSリダイレクトを行う際の、リダイレクト先となる HOST 名。
SSL 証明書を発行した HOST 名を指定する。
デフォルト:'' -
SSL_FORCE_URL_PREFIXES
HTTPS でアクセスさせたい URL を Tuple で記述する。
SSL_ENABLEDがTrueの場合、前方一致で URL を照合し、一致する場合は、HTTPS リダイレクトをする。
デフォルト:('/admin', '/account')
SSL ミドルウェアの設定
mezzanine.core.middleware.SSLRedirectMiddleware という Middleware がいます。
デフォルトだとコメントアウトされています。
この Middleware を有効化しないと、各項目の設定が効きませんので、SSL 設定時は、有効化してください。
# Uncomment the following if using any of the SSL settings:
"mezzanine.core.middleware.SSLRedirectMiddleware",
設定変更内容
以下の設定を行いました。
-
SSL_ENABLED
True -
SSL_FORCED_PREFIXES_ONLY
False -
SSL_FORCE_HOST
''デフォルトのままです。 -
SSL_FORCE_URL_PREFIXES
('/admin', '/ja/admin', '/account')
ja付きで飛ばされているので、/ja付きの管理画面も追加
SSL_FORCED_PREFIXES_ONLY を False にすると、SSL_FORCE_URL_PREFIXES の指定外 URL にアクセスされた際、HTTP 通信が強制されなくなります。
HTTP であれば HTTP のまま、HTTPS であれば、HTTPS のままになり、SSL_FORCE_URL_PREFIXES の指定 URL の場合のみ、HTTPS 通信が強制されるようになります。
HTTP サーバ 側でも同じ設定は可能で、且つ、HTTP サーバ での設定がパフォーマンス的にもよさそうに思います。
レンタルサーバ 等、サーバ 側の設定変更が難しい場合に、便利な機能なのかもしれません。
以上です。
コメント