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

以上です。

コメント