akka http SSLConfig与主机名验证和证书验证有关

vgk*_*ski 7 ssl http hostname ssl-certificate akka

我在客户端有一些Akka http配置问题.我正在尝试连接到不提供的服务器: - 公共签名证书 - 与主机名相对应的证书我没有关注此nginx,因此我无法更改服务器端配置.我只能改变客户端.

在对配置SSL进行了大量调查之后,我发现我需要在两个不同的级别在application.conf中配置SSL选项:

akka.ssl-config.ssl.loose.acceptAnyCertificate=true
akka.ssl-config.loose.disableHostnameVerification = true
Run Code Online (Sandbox Code Playgroud)

ssl-config.loose.acceptAnyCertificate=true
ssl-config.loose.disableHostnameVerification = true
Run Code Online (Sandbox Code Playgroud)

我检查过配置很好用

log-config-on-start = "on" 
Run Code Online (Sandbox Code Playgroud)

问题是我仍然在akka调试级别得到错误(不是很清楚)

[ingestionApiClient-akka.actor.default-dispatcher-13] [akka://ingestionApiClient/user/StreamSupervisor-0/flow-216-1-unknown-operation] closing output
Run Code Online (Sandbox Code Playgroud)

看看wireshark我发现这是证书验证的问题

TLSv1 Record Layer: Alert (Level: Fatal, Description: Certificate Unknown)
Run Code Online (Sandbox Code Playgroud)

我想JVM配置是我所做的全部,所以我也尝试按照这种方法修改JVM SSL配置: Java SSL:如何禁用主机名验证

配置SSLContext并将其传递给akka http没问题因为我可以设置默认的HttpsContext

val sc = SSLContext.getInstance("TLS")
*...configuration...*
val customContext =HttpsContext(sc, sslParameters = Some(params))
Http().setDefaultClientHttpsContext(customHttpsContext)
Run Code Online (Sandbox Code Playgroud)

但无论如何我都找不到配置默认主机名验证程序.Http类没有任何方法Http().setDefaultHostnameVerifier

这是我如何连接到服务器

val dataIngestFlow = Http().outgoingConnectionTls(config.httpEndpointHost,config.httpEndpointPort)
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?非常感谢你的帮助

Geo*_*rge 0

我不知道您使用的是哪个版本akkaakka-http但是您是否尝试将配置字段设置akka.ssl-config.hostnameVerifierClass为接口的特定实现HostNameVerifier

接受所有内容的最简单的验证器如下所示:

public static class AcceptAllHostNameVerifier implements HostnameVerifier {
  @Override
  public boolean verify(String s, SSLSession sslSession) {
    return true;
  }
}
Run Code Online (Sandbox Code Playgroud)