如何配置 Play 应用程序以使用 Let's Encrypt 证书?

2024-06-25

获得证书后,如何从中生成 JKS 密钥存储?

如何配置 Play 应用程序以使用此密钥存储?

我还需要做什么吗?


以下是获取(更新)letsencrypt 证书的脚本:

#!/bin/bash

/path/to/your/app/stop # stop the play application; especially if it is running on port 80 otherwise the certificate generation will fail

rm -rf /etc/letsencrypt.bak

mv /etc/letsencrypt /etc/letsencrypt.bak

./letsencrypt-auto certonly --standalone -n -m [email protected] /cdn-cgi/l/email-protection --agree-tos -d example.com -d www.example.com

cd /etc/letsencrypt/live/example.com

openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out cert_and_key.p12 -CAfile chain.pem -caname root -passout pass:your_password

keytool -importkeystore -srcstorepass your_password -destkeystore keyStore.jks -srckeystore cert_and_key.p12 -srcstoretype PKCS12 -storepass your_password

/path/to/your/app/start # start the application

您可以安排一个 cron 作业定期运行此脚本,因为 LetsEncrypt 证书目前会在 90 天后过期。

获得证书后,您需要修改应用程序启动脚本,如下所示:

/path/to/your/app/app_name_script -Dhttps.port=443 -Dplay.server.https.keyStore.path=/etc/letsencrypt/live/example.com/keyStore.jks -Dplay.server.https.keyStore.password=your_password -Djdk.tls.ephemeralDHKeySize=2048 -Djdk.tls.rejectClientInitiatedRenegotiation=true # ... more parameters if required

就快到了。当您运行该应用程序时,您会得到A-评级来自SSL Labs https://www.ssllabs.com/ssltest/。此次评级下调与前向保密 https://community.qualys.com/blogs/securitylabs/2013/06/25/ssl-labs-deploying-forward-secrecy。为了解决前向保密问题(并获得完整的Arating)您需要通过实现自定义 SSLEngineProvider 来指定密码套件的顺序:

package controllers

import java.nio.file._
import java.security.KeyStore
import javax.net.ssl._

import play.core.ApplicationProvider
import play.server.api._

class CustomSslEngineProvider(appProvider: ApplicationProvider) extends SSLEngineProvider {

  val priorityCipherSuites = List(
    "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
    "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
    "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA")


  def readPassword(): Array[Char] = System.getProperty("play.server.https.keyStore.password").toCharArray

  def readKeyInputStream(): java.io.InputStream = {
    val keyPath = FileSystems.getDefault.getPath(System.getProperty("play.server.https.keyStore.path"))
    Files.newInputStream(keyPath)
  }

  def readKeyManagers(): Array[KeyManager] = {
    val password = readPassword()
    val keyInputStream = readKeyInputStream()
    try {
      val keyStore = KeyStore.getInstance(KeyStore.getDefaultType)
      keyStore.load(keyInputStream, password)
      val kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm)
      kmf.init(keyStore, password)

      kmf.getKeyManagers
    } finally {
      keyInputStream.close()
    }
  }

  def createSSLContext(): SSLContext = {
    val keyManagers = readKeyManagers()
    val sslContext = SSLContext.getInstance("TLS")
    sslContext.init(keyManagers, Array.empty, null)
    sslContext
  }

  override def createSSLEngine(): SSLEngine = {
    val ctx = createSSLContext()
    val sslEngine = ctx.createSSLEngine
    val cipherSuites = sslEngine.getEnabledCipherSuites.toList
    val orderedCipherSuites =
      priorityCipherSuites.filter(cipherSuites.contains) ::: cipherSuites.filterNot(priorityCipherSuites.contains)
    sslEngine.setEnabledCipherSuites(orderedCipherSuites.toArray)
    val params = sslEngine.getSSLParameters
    params.setUseCipherSuitesOrder(true)
    sslEngine.setSSLParameters(params)
    sslEngine
  }
}

不要忘记设置

play.server.https.engineProvider=controllers.CustomSslEngineProvider

in your 应用程序配置文件.

使用 Play 2.5.x 进行测试

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何配置 Play 应用程序以使用 Let's Encrypt 证书? 的相关文章

  • 如何在我的 play2.0 框架 Web 应用程序中集成短信和电子邮件提醒。

    我正在 play2 0 框架中创建一个 Web 应用程序 在这个应用程序中 我需要集成短信和电子邮件提醒 通过从数据库获取详细信息来在特定日期和时间发送短信和电子邮件 为此 是否有任何免费的 API 调度程序 网络服务或应用程序 如果有的话
  • formFactory.form() 不存在!游戏框架

    我有一个小问题 我想创建一个网络应用程序 并且我通过 java 文档学习 PlayFramework 这个示例代码 public Result hello DynamicForm requestData formFactory form b
  • 证书中的主机名不匹配:<>!=<> WSO2 APIM

    我有一个 https 端点 我需要从 wso2 API 管理器访问它 使用 1 10 我已经将证书文件添加到 client truststore jks 文件中 但现在它给出了如下错误 hostname in certificate did
  • 通过 https 负载均衡器的 WCF http 服务

    我有一个可以通过 http 端点访问的 WCF Web 服务 现在 该服务应通过 https 与负载均衡器一起发布 客户端是通过 svcutil exe 在 Net 中创建的 但 Java 客户端也需要 WSDL 我的理解是 Web 服务在
  • 播放框架 [2.0] HTTPS

    我正在使用 Play Framework 2 0 开发一个 Web 服务器 其中登录是由我们也在制作的 Android 设备软件执行的 我们主要担心的是 我们在 play 2 0 中找不到任何对 HTTPS 的支持 感觉这是一个学校项目 我
  • 使用 HTTPS 时我需要/想要 gzip 压缩吗?

    使用 HTTPS 是否已经包含 透明 内容压缩 或者我是否仍然应该担心与浏览器协商是否压缩我的 Servlet 输出 如果 HTTPS 已经有压缩 是无条件的还是需要配置 协商 启用 默认情况下 TLS 不启用压缩 但它 压缩 是在 TLS
  • 将混合内容重定向到 HTTPS 的正确 htaccess 规则是什么

    当通过 HTTPS 访问网站时 是否有一种方法可以使用 htaccess 重定向条件和重定向来捕获通过 HTTP 调用的内容 如果通过 HTTPS 访问网站 http 内容将被重定向到 https 等效 url 本质上 当我的网站通过 HT
  • scala play框架如何对异步控制器进行单元测试

    使用 Scala play 2 5 版并尝试遵循以下文档中的单元测试控制器指南 https www playframework com documentation 2 5 x ScalaTestingWithScalaTest https
  • Squid+iptables:如何允许https通过并绕过Squid?

    今天基本上是从 Squid 和 iptables 开始的 google 是你的朋友 这东西会害死我的 我在 Ubuntu 9 04 服务器上设置了 Squid3 作为透明代理 当我使用代理盒作为我的默认网关等时 它工作得很好 此设置的 ip
  • GET 数据是否也在 HTTPS 中加密?

    当你拿到时 https crypted google com search q s https encrypted google com search q s Is the s查询已加密 还是只是回应 如果不是 为什么谷歌还要对其公共内容进
  • Maven:无法传输文件 XXX 返回代码为: 501 ,ReasonPhrase:HTTPS 必需

    我在构建 Maven 项目时收到意外的 501 错误代码 该消息显示需要 HTTPS 但我没有更改我的 settings xml 如何检查我的配置是否发生更改 我怎样才能让事情正常运转 其原因解释于Maven 依赖项失败并出现 501 错误
  • SSL 与 Ruby on Rails

    我需要做什么才能让我的 Ruby on Rails 应用程序获得使用 https 的流量 我安装了证书 如果我在访问网站时在地址栏中手动输入 https 则会出现小锁图标 但只需在浏览器中手动访问 www example app com 即
  • 如何修复:升级 Node 版本后出现“EPROTO”错误

    以下代码适用于 Node 的v10 15 3版本 const post require request post url https cidadao sinesp gov br sinesp cidadao mobile consultar
  • 如何将 JSON 转换为 Scala 中的类型

    我的问题是我收到来自 twitter 的 JSON 文本 然后我想将此文本转换为 scala 中的本机对象 有标准方法可以做到这一点吗 我也在用Play 2 这是我所拥有的 import scala io Source fromInputS
  • 如何使“CustomExecutionContext”可用于 Play 2.6 控制器中的依赖项注入?

    我正在跟随Play 2 6 的 Scala 文档和示例代码用于创建非阻塞操作 https www playframework com documentation 2 6 x ScalaAsync Creating non blocking
  • 没有配置应用程序加载器

    我正在运行 Play 应用程序 如播放文档 https www playframework com documentation 2 6 x Deploying using the sbt assembly plugin java Dconf
  • 在 AWS elastic beanstalk 上安装 HTTPS SSL 的过程?

    我已成功安装自我认证的 SSL 以使 https 在 AWS linux EC2 上运行 然后 我在自动缩放和负载平衡环境中的弹性豆茎上尝试它 但我失败了 我所做的过程是首先启动一个新的弹性豆茎应用程序 我生成 SSL 证书的私钥和自认证公
  • 附加调试器(使用eclipse)播放框架失败

    我正在使用 Scala 通过 Eclipse IDE 在 Play 框架之上编写一个 Web 我正在尝试调试我的应用程序 但遇到调试附加失败 我尝试使用 Java 而不是 Scala 进行切换 但遇到了同样的错误 这就是我所做的 创建项目并
  • 如何配置 Play 应用程序以使用 Let's Encrypt 证书?

    获得证书后 如何从中生成 JKS 密钥存储 如何配置 Play 应用程序以使用此密钥存储 我还需要做什么吗 以下是获取 更新 letsencrypt 证书的脚本 bin bash path to your app stop stop the
  • 使脚本内容“安全”地用于 HTTPS 显示(Bokeh)

    我正在寻找解决方案 并遇到了一个已删除的问题玛丽亚 萨斯 https stackoverflow com users 5082720 maria saz 幸运的是 我能够看到它通过谷歌 由于我也有同样的问题 所以借用了原文 我正在使用内联嵌

随机推荐