java - Akka-HTTP 服务器 HTTPS 支持

标签 java https akka akka-http sslcontext

我发现自己很难为我们的 akka-http java 应用程序启用 https 支持。 文档页面( https://doc.akka.io/docs/akka-http/current/server-side/server-https-support.html )应该有所帮助,但由于某种原因,在我的情况下却没有。

根据我从该页面获得的信息 - 想法是获取 HttpsConnectionContext 实例并将其用作 http.setDefaultClientHttpsContext(...) 方法的参数在实际进行一些路由绑定(bind)之前调用。

到目前为止我所拥有的:

从配置创建SSLContext的代码:

public static SSLContext getSslContext(String path, ActorSystem system) {
    final AkkaSSLConfig sslConfig = AkkaSSLConfig.get(system);

    final Config overrides = system.settings().config().getConfig(path);
    final Config defaults = system.settings().config().getConfig("ssl-config");

    final SSLConfigSettings config = SSLConfigFactory.parse(overrides.withFallback(defaults));

    return new ConfigSSLContextBuilder(
        new AkkaLoggerFactory(system),
        config,
        sslConfig.buildKeyManagerFactory(config),
        sslConfig.buildTrustManagerFactory(config)
    ).build();
}

实际的配置和平:

akka.ssl-config {
  trustManager = {
    stores = [
      { type: "JKS" , path: "xxx-truststore.jks", password = "xxx"}
    ]
  }
  keyManager = {
    stores = [
      { type: "JKS" , path: "xxx-keystore.jks", password = "xxx"}
    ]
  }
}

使用它们启用 https:

final SSLContext sslContext = Utils.getSslContext("akka.ssl-config", system);
final HttpsConnectionContext httpsContext = ConnectionContext.https(sslContext);
http.setDefaultClientHttpsContext(httpsContext);

final CompletionStage<ServerBinding> binding =
    http.bindAndHandle(routeFlow, ConnectHttp.toHost("localhost",443), materializer);

但这实际上没有任何作用。如果我尝试对服务器进行一些 https 调用,则会出现以下异常:

非法请求,响应状态为“400 错误请求”:不支持的 HTTP 方法:HTTP 方法以 0x16 开头,而不是任何已知的 HTTP 方法。也许这是发送到 HTTP 端点的 HTTPS 请求?

我可能错过了一些东西,但我不知道是什么

最佳答案

看起来毕竟是我的错) 使用的方法显然是 http.setDefaultServerHttpContext(...) 而不是 http.setDefaultClientHttpsContext(...)

关于java - Akka-HTTP 服务器 HTTPS 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60633824/

相关文章:

java - 为安卓制作包

java - 上传带有嵌套数组的 jaxb bean 返回状态 400

amazon-web-services - 如何为ELB实例安装外部SSL?

asp.net - 我的 SSL 证书是否适用于 IIS 上的新 Wordpress 网站?

java - 无法覆盖通用接口(interface)

ssl - 使用 HTTPS/TLS/SSL 的页面内容签名

java - 使用 Maven 通过 Proguard 缩小 Akka

scala - Akka AssociationError - LAN 地址与本地主机

scala - 无法在 Akka Stream 中使用 GraphStage 类运行 SourceShape

java - 从 ZipInputStream Java 读取时出现 IndexOutOfBoundsException