无法为 https 指定密钥库文件

Posted

技术标签:

【中文标题】无法为 https 指定密钥库文件【英文标题】:Can't specify a keystore file for https 【发布时间】:2016-04-13 13:11:37 【问题描述】:

我已经在 Play 上拉了几个小时的头发(再次)。我正在使用 v2.4.6 并尝试使用自定义密钥库文件进行 HTTPS 访问。

我关注了documentation:

在我的 build.sbt 文件中添加了 javaOptions in run += "-Dhttp.port=9020" 添加了play.server.https.keyStore.path = "conf/mykeystorefile.jksplay.server.https.keyStore.password = "my_keystore_file_passphrase

然后我像往常一样使用激活器 UI 启动播放,并且 HTTPS 请求确实有效,但播放总是生成一个 generated.keystore 并使用它而不是使用我需要的那个。并打印一条警告:“使用生成的密钥和 HTTPS 的自签名证书。这不应该在生产中使用。”

如果我查看 Play 源代码,this 是日志的来源。但是在阅读代码时,只有在没有提供play.server.https.keyStore.path 时才会发生这种情况,它是......

发生了什么事?

【问题讨论】:

【参考方案1】:

根据您的问题,我猜您正在开发模式下使用 Play。如果是这种情况,我认为在开发模式下,Play 在启动应用程序之前无法读取这些值(同样的问题使您使用 javaOptions 指定端口)。

您可以尝试使用系统属性 (-Dplay.server.https.(...)) 指定这些值或在 build.sbt 中指定这些选项:

devSettings := Map(
    "play.server.http.port" -> "9020",
    "play.server.https.keyStore.path" -> "/path/to/file",
    // (...)
)

注意:不知道这是否是您配置中的拼写错误,但我认为您还需要指定 https.port...

【讨论】:

是的,我的意思是 https.port 这是一个错字。 devSettings 不起作用,但将 javaOptions in run += "-Dplay.server.https.keyStore.path=path/to/keystore"javaOptions in run += "-Dplay.server.https.keyStore.password=password" 添加到我的 build.sbt 就可以了。非常感谢!【参考方案2】:

对于那些真正只想在开发模式下使用的人...

“您可以在 build.sbt 中为 run 命令配置额外的设置。这些设置不会在您部署应用程序时使用。”

~https://www.playframework.com/documentation/2.5.x/ConfigFile#Extra-devSettings

例如:

PlayKeys.devSettings := Seq(
   "https.port" -> "9443",
   "play.server.https.keyStore.path" -> "conf/keystore.jks"
)

【讨论】:

以上是关于无法为 https 指定密钥库文件的主要内容,如果未能解决你的问题,请参考以下文章

Linux秘钥登录

nginx负载均衡,

语法错误或访问冲突:1071 指定的密钥太长;最大密钥长度为 767 字节 [重复]

将Java密钥库转换为PEM格式

Git生成ssh密钥指定文件

指定自定义值以在 Zapier 集成 Gmail 到 S3 中构建 S3 密钥