4

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

谢谢

4

1 回答 1

0

这里有一个注释,“ssl-config”不是根键: https ://www.playframework.com/documentation/2.8.x/WsSSL#Table-of-Contents

注意:下面的链接与 Typesafe SSLConfig 相关,它使用 ssl-config 作为 ssl 属性的前缀。Play 使用 play.ws.ssl 前缀,因此例如 ssl-config.loose.acceptAnyCertificate 变为 play.ws.ssl.loose.acceptAnyCertificate 用于您的 play WSClient 配置。

也许尝试用“play.ws.ssl”替换application.conf中的“ssl-config”。我不得不挖一点才能找到那个。这有点令人困惑。

于 2020-05-06T12:21:30.623 回答