§HTTPSの設定
PlayはHTTPSを提供するように設定できます。有効にするには、`https.port`システムプロパティを使用して、Playがリッスンするポートを指定します。例えば
./bin/your-app -Dhttps.port=9443
§設定の提供
HTTPSの設定は、システムプロパティを使用するか、`application.conf`で指定できます。詳細は、設定および本番環境設定のページを参照してください。
§SSL証明書
§キーストアからのSSL証明書
デフォルトでは、Playは自己署名証明書を生成しますが、通常、これはWebサイトの提供には適していません。Playは、SSL証明書とキーを設定するためにJavaキーストアを使用します。
認証局は、多くの場合、Javaキーストアを作成する方法の手順を提供しています(通常、Tomcatの設定を参照)。JDKのkeytoolユーティリティを使用してキーストアを生成する方法に関する公式のOracleドキュメントはこちらにあります。X.509証明書の生成セクションにも例があります。
キーストアを作成したら、次の設定プロパティを使用して、Playがそれを使用するように設定できます。
- **play.server.https.keyStore.path** - 秘密鍵と証明書を含むキーストアへのパス。指定しない場合は、キーストアが自動的に生成されます。
- **play.server.https.keyStore.type** - キーストアのタイプ。デフォルトは`JKS`です。
- **play.server.https.keyStore.password** - パスワード。デフォルトは空白のパスワードです。
- **play.server.https.keyStore.algorithm** - キーストアのアルゴリズム。デフォルトはプラットフォームのデフォルトアルゴリズムです。
§カスタムSSLエンジンからのSSL証明書
SSL証明書を設定する別の方法は、カスタムのSSLEngineを提供することです。これは、クライアント認証の場合など、カスタマイズされた`SSLEngine`が必要な場合にも役立ちます。Javaでは、`play.server.SSLEngineProvider`の実装を提供する必要があります。Scalaでは、`play.server.api.SSLEngineProvider`の実装を提供する必要があります。例えば
- Scala
-
import javax.inject.Inject import javax.net.ssl._ import play.core.ApplicationProvider import play.server.api._ class CustomSSLEngineProvider @Inject() (appProvider: ApplicationProvider) extends SSLEngineProvider { override def createSSLEngine(): SSLEngine = { // change it to your custom implementation sslContext().createSSLEngine } override def sslContext(): SSLContext = { // change it to your custom implementation SSLContext.getDefault } }
- Java
-
import java.security.NoSuchAlgorithmException; import javax.inject.Inject; import javax.net.ssl.*; import play.server.ApplicationProvider; import play.server.SSLEngineProvider; public class CustomSSLEngineProvider implements SSLEngineProvider { private final ApplicationProvider applicationProvider; @Inject public CustomSSLEngineProvider(ApplicationProvider applicationProvider) { this.applicationProvider = applicationProvider; } @Override public SSLEngine createSSLEngine() { return sslContext().createSSLEngine(); } @Override public SSLContext sslContext() { try { // Change it to your custom implementation, possibly using ApplicationProvider. return SSLContext.getDefault(); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } }
`play.server.SSLEngineProvider`または`play.server.api.SSLEngineProvider`の実装を作成したら、次のシステムプロパティでPlayがそれを使用するように設定します。
- **`play.server.https.engineProvider`** - `play.server.SSLEngineProvider`または`play.server.api.SSLEngineProvider`を実装するクラスへのパス
例
./bin/your-app -Dhttps.port=9443 -Dplay.server.https.engineProvider=mypackage.CustomSSLEngineProvider
§HTTPの無効化
HTTPポートでのバインディングを無効にするには、`http.port`システムプロパティを`disabled`に設定します。例:
./bin/your-app -Dhttp.port=disabled -Dhttps.port=9443 -Dplay.server.https.keyStore.path=/path/to/keystore -Dplay.server.https.keyStore.password=changeme
§本番環境でのHTTPSの利用
PlayをTLS終端レイヤーとして使用する場合、次の設定に注意してください。
- **`SSLParameters.setUseCipherSuiteorder()`** - 暗号スイートの順序をサーバーの優先順位に並べ替えます。
- **-Djdk.tls.ephemeralDHKeySize=2048** - DH鍵交換の鍵サイズを増やします。
- **-Djdk.tls.rejectClientInitiatedRenegotiation=true** - クライアントの再ネゴシエーションを拒否します。
このドキュメントに誤りを見つけましたか?このページのソースコードはこちらにあります。ドキュメントガイドラインを読んだ後、プルリクエストを送信してください。質問やアドバイスがあれば、コミュニティフォーラムにアクセスして、コミュニティとの会話を始めてください。