【发布时间】:2016-01-21 21:06:51
【问题描述】:
我在客户端的 Akka http 配置有一些问题。我正在尝试连接到不提供的服务器: - 公开签署的证书 - 与主机名对应的证书 我没有这个 nginx 的手,所以我无法更改服务器端配置。我只能更改客户端。
在对配置 SSL 进行大量调查后,我发现我需要在 application.conf 中在两个不同级别配置 SSL 选项:
akka.ssl-config.ssl.loose.acceptAnyCertificate=true
akka.ssl-config.loose.disableHostnameVerification = true
和
ssl-config.loose.acceptAnyCertificate=true
ssl-config.loose.disableHostnameVerification = true
我已经检查了配置是否正常
log-config-on-start = "on"
问题是我在akka调试级别仍然得到错误(不是很清楚)
[ingestionApiClient-akka.actor.default-dispatcher-13] [akka://ingestionApiClient/user/StreamSupervisor-0/flow-216-1-unknown-operation] closing output
查看wireshark我发现这是证书验证的问题
TLSv1 Record Layer: Alert (Level: Fatal, Description: Certificate Unknown)
我想 JVM 配置覆盖了我所做的一切,所以我也尝试按照这个方法来修改 JVM SSL 配置: Java SSL: how to disable hostname verification
配置 SSLContext 并将其传递给 akka http 没有问题,因为我可以使用
设置默认 HttpsContextval sc = SSLContext.getInstance("TLS")
*...configuration...*
val customContext =HttpsContext(sc, sslParameters = Some(params))
Http().setDefaultClientHttpsContext(customHttpsContext)
但无论如何我都找不到配置默认主机名验证程序。 Http 类没有像Http().setDefaultHostnameVerifier这样的方法
这就是我连接服务器的方式
val dataIngestFlow = Http().outgoingConnectionTls(config.httpEndpointHost,config.httpEndpointPort)
我怎样才能做到这一点?非常感谢您的帮助
【问题讨论】:
标签: http ssl ssl-certificate akka hostname