无法为 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.jks
和play.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 指定密钥库文件的主要内容,如果未能解决你的问题,请参考以下文章