§アプリケーションシークレット
Play は、下記を含むいくつかの目的で秘密鍵を使います:
- セッション cookie と CSRF トークンに署名する
- 組み込みの暗号化ユーティリティ
これは application.conf
内にある play.crypto.secret
という名前のプロパティで設定されていて、デフォルトは changeme
です。このデフォルト値が示唆する通り、本番環境では変更されなければなりません。
Paly は、prod モードで起動した際に秘密鍵が設定されていない、または
changeme
が設定されていることを検出すると、エラーを投げます。
§ベストプラクティス
この秘密鍵にアクセスできる人なら誰でも、望み通りのあらゆるセッションを生成できることになり、望み通りのあらゆるユーザとして簡単にシステムにログインすることができます。このため、アプリケーションシークレットをソース管理システムに登録しないことを強くお勧めします。その代わりに、本番サーバに設定されるべきです。これは、本番のアプリケーションシークレットを application.conf
に設定することは悪い習慣と見なされることを意味します。
本番サーバでアプリケーションシークレットを設定する方法のひとつは、起動スクリプトにシステム設定として渡すことです。例えば:
/path/to/yourapp/bin/yourapp -Dplay.crypto.secret="QCY?tAnfk?aZ?iwrNwnxIlR6CTf:G3gf:90Latabg@5241AB`R5W:1uDFN];Ik@n"
このアプローチはとてもシンプルであり、Play の本番モードにおけるアプリケーションの起動に関するドキュメントでも、アプリケーションシークレットは設定されていなければならないことを思い出す注意として、このアプローチを使います。しかしながら、いくつかの環境ではコマンドライン引数に秘密鍵を設定するのは良い習慣と見なされません。これに対応する方法はふたつあります。
§環境変数
ひとつ目の方法ではアプリケーションシークレットを環境変数に配置します。この場合、application.conf
ファイルに次のように設定することをお勧めします:
play.crypto.secret="changeme"
play.crypto.secret=${?APPLICATION_SECRET}
この設定の二行目は、APPLICATION_SECRET
という環境変数が設定されている場合は、この変数を秘密鍵に設定しますが、そうでない場合は一行目の秘密鍵から変更しません。
このアプローチは、クラウドプロバイダが提供する API を通じて設定することができる環境変数によってパスワードやその他の秘密鍵を設定することが標準的な習慣であるクラウドベースのデプロイシナリオにおいて、特に有効です。
§本番設定ファイル
別のアプローチでは、application.conf
をインクルードをするものの、アプリケーションシークレットやパスワードのような慎重に扱うべき設定をすべて上書きする production.conf
ファイルをサーバ上に作成します。
例えば、以下のようにします:
include "application"
play.crypto.secret="QCY?tAnfk?aZ?iwrNwnxIlR6CTf:G3gf:90Latabg@5241AB`R5W:1uDFN];Ik@n"
それから、以下のように Play を起動します:
/path/to/yourapp/bin/yourapp -Dconfig.file=/path/to/production.conf
§アプリケーションシークレットの生成
Play は新しい秘密鍵を生成するユーティリティを提供しています。Play コンソールで playGenerateSecret
を実行してください。アプリケーションで使用できる新しい秘密鍵を生成します。例えば、以下のようにします:
[my-first-app] $ playGenerateSecret
[info] Generated new secret: QCYtAnfkaZiwrNwnxIlR6CTfG3gf90Latabg5241ABR5W1uDFNIkn
[success] Total time: 0 s, completed 28/03/2014 2:26:09 PM
§application.conf 内のアプリケーションシークレットの更新
Play は、開発またはテストサーバにおいて特定の秘密鍵が設定されているべき application.conf
内の秘密鍵を更新する便利なユーティリティも提供しています。これは、アプリケーションシークレットを使ってデータを暗号化しており、dev モードでアプリケーションを起動しているときはいつでも秘密鍵が同じであることを保証してほしいときに便利です。
application.conf
内の秘密鍵を更新するには、Play コンソールにて playUpdateSecret
を実行します:
[my-first-app] $ playUpdateSecret
[info] Generated new secret: B4FvQWnTp718vr6AHyvdGlrHBGNcvuM4y3jUeRCgXxIwBZIbt
[info] Updating application secret in /Users/jroper/tmp/my-first-app/conf/application.conf
[info] Replacing old application secret: play.crypto.secret="changeme"
[success] Total time: 0 s, completed 28/03/2014 2:36:54 PM
Next: JDBC コネクションプールの設定
このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。