我试图在我的Play应用中使用自定义ssl配置的WSClient,但它没有工作。
我的控制器看起来像这样。
@Singleton
class HomeController @Inject()(cc: ControllerComponents, ws: WSClient, configuration: Configuration) extends AbstractController(cc) {
implicit val timeout: Timeout = 5 seconds
def index() = Action.async {
val url = "https://our-microservice-endpoint.com"
ws.url(url).get().map {
response =>
Ok((response.xml \\ "payload").head.text)
}
}
}
我添加了下面的ssl配置对象到 application.conf
:
ssl-config {
keyManager = {
stores = [
{ type = "JKS", path = "client.jks", password = "changeit1" }
]
}
trustManager = {
stores = [
{ type = "JKS", path = "exampletrust.jks" }
]
}
}
(显然,我的本地设置已经到位)。我知道我传递给密钥存储和信任存储的值是有效的,因为它们是我在其他应用程序中使用的。
然而,如果我调试应用程序并查看已经注入的wsclient,它似乎没有ssl设置。当我运行控制器时,我得到了一个ssl handshake_failure
.
是我错过了什么,还是这一切都错了?我使用的是最新的play框架2.6版本。
谅谅,我是用最新的play框架2.6版。
这里有一个说明,"ssl-config "不是根密钥。https:/www.playframework.comdocumentation2.8.xWsSSL#Table-of-Contents
注意:下面的链接是相对于Typesafe SSLConfig的,它使用ssl-config作为ssl属性的前缀。 Play 使用 play.ws.ssl 前缀,因此,例如 ssl-config.loose.acceptAnyCertificate 变成 play.ws.ssl.loose.acceptAnyCertificate 为你的 play WSClient 配置。
也许可以尝试将application.conf中的 "ssl-config "替换为 "play.ws.ssl"。 我不得不挖了一下才找到那个,它有点混乱。