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 サーバ での設定がパフォーマンス的にもよさそうに思います。
レンタルサーバ 等、サーバ 側の設定変更が難しい場合に、便利な機能なのかもしれません。
以上です。
コメント