§配置 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 配置为使用它
- 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 - 拒绝客户端重新协商。
下一步: 部署到云服务
发现此文档中的错误? 此页面的源代码可以在 这里 找到。 在阅读 文档指南 后,请随时贡献拉取请求。 有问题或建议要分享? 转到 我们的社区论坛 与社区开始对话。