WSClient Play Framework SSL设置

时间:2017-11-17 08:50:48

标签: scala ssl playframework ws-client

我正在尝试使用自定义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。

由于

1 个答案:

答案 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”。我不得不花点时间找到那个。有点混乱。