Akka-HTTP сервер HTTPS Поддержка - PullRequest
0 голосов
/ 11 марта 2020

Я пытался включить поддержку https для нашего приложения akka-http java. Страница документации (https://doc.akka.io/docs/akka-http/current/server-side/server-https-support.html) должна помочь, но по некоторым причинам в моем случае это не помогает.

Из того, что я получил с этой страницы - идея состоит в том, чтобы получить HttpsConnectionContext экземпляр и использовать его в качестве параметра для вызова метода http.setDefaultClientHttpsContext(...) перед тем, как на самом деле выполнить какое-либо связывание маршрута.

Что у меня есть:

Код, который создает 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-вызов на сервер, я получу следующее исключение:

Illegal request, responding with status '400 Bad Request': Unsupported HTTP method: The HTTP method started with 0x16 rather than any known HTTP method. Perhaps this was an HTTPS request sent to an HTTP endpoint?

Возможно, я что-то упускаю, но я не знаю, что

1 Ответ

0 голосов
/ 11 марта 2020

выглядит как моя вина в конце концов) метод, который нужно использовать, очевидно, http.setDefaultServerHttpContext(...) не http.setDefaultClientHttpsContext(...)

...