文档

§配置 HTTPS

Play 可以配置为提供 HTTPS 服务。要启用此功能,只需告诉 Play 使用 https.port 系统属性监听哪个端口即可。例如

./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 终止层,请注意以下设置

下一步: 部署到云服务


发现此文档中的错误? 此页面的源代码可以在 这里 找到。 在阅读 文档指南 后,请随时贡献拉取请求。 有问题或建议要分享? 转到 我们的社区论坛 与社区开始对话。