文件

§設定 HTTPS

Play 可以設定為提供 HTTPS 服務。若要啟用此功能,只要使用 https.port 系統屬性告知 Play 要監聽哪個埠即可。例如

./bin/your-app -Dhttps.port=9443

§提供設定

HTTPS 組態可以使用系統屬性或在 application.conf 中提供。如需更多詳細資料,請參閱 組態製作組態 頁面。

§SSL 憑證

§來自金鑰庫的 SSL 憑證

預設情況下,Play 會自行產生自簽憑證,但通常不適合用於提供網站服務。Play 使用 Java 金鑰庫來組態 SSL 憑證和金鑰。

簽署單位通常會提供如何建立 Java 金鑰庫的說明(通常會參考 Tomcat 組態)。有關如何使用 JDK keytool 實用程式產生金鑰庫的官方 Oracle 文件,請參閱 這裡。在 產生 X.509 憑證 區段中也有範例。

建立金鑰庫後,可以使用下列組態屬性來組態 Play 以使用金鑰庫

§來自自訂 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.SSLEngineProviderplay.server.api.SSLEngineProvider 建立實作後,下列系統屬性會設定 Play 以使用它

範例

./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 終止層,請注意下列設定

下一步:部署到雲端服務


在此文件中發現錯誤?此頁面的原始程式碼可以在 這裡 找到。在閱讀 文件指南 後,請隨時貢獻一個 pull request。有問題或建議要分享?請前往 我們的社群論壇 與社群展開對話。