我正在尝试使用自定义ssl配置在我的Play应用中使用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-config对象添加到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
。
我错过了什么或者这都错了吗?我正在使用最新的播放框架版本2.6。
由于
答案 0 :(得分:0)
这里有一个注释,“ ssl-config”不是根密钥: https://www.playframework.com/documentation/2.8.x/WsSSL#Table-of-Contents
注意:以下链接相对于Typesafe SSLConfig,后者使用ssl-config作为ssl属性的前缀。 Play使用play.ws.ssl前缀,例如,对于您的播放WSClient配置,ssl-config.loose.acceptAnyCertificate变为play.ws.ssl.loose.acceptAnyCertificate。
也许尝试将application.conf中的“ ssl-config”替换为“ play.ws.ssl”。我不得不花点时间找到那个。有点混乱。