Настройте клиентский сертификат AWS API Gateway с Java TrustStore для проверки входящего запроса - PullRequest
0 голосов
/ 03 мая 2018

Я использую Akka 2.4.x и пытаюсь настроить хранилище доверенных сертификатов с помощью Akka Http - чтобы я мог проверить входящий запрос на сервер.

Мой стек: 1. AWS API Gateway - отправка сертификата клиента 2. AKKA HTTP использует хранилище доверенных сертификатов Java для проверки

final Http http = Http.get(system);

if (properties.useSSL()) {

  log.info("Starting on " + properties.url() + ":" + properties.port());
  HttpsConnectionContext https = useHttps(system);
  ConnectHttp connect = ConnectHttp.toHostHttps(properties.urlSSL(), properties.portSSL())
      .withCustomHttpsContext(https);

  http.bindAndHandle(appRoute().flow(system, materializer), connect, materializer);
  log.info("Started on " + properties.urlSSL() + ":" + properties.portSSL());
} else {
  log.info("Starting on " + properties.url() + ":" + properties.port());
  final ConnectHttp host = ConnectHttp.toHost(properties.url(), properties.port());

  http.bindAndHandle(appRoute().flow(system, materializer), host, materializer);
  log.info("Started on " + properties.url() + ":" + properties.port());
}

  public HttpsConnectionContext useHttps(ActorSystem system) {
    HttpsConnectionContext https = null;
    try {
      final char[] password = properties.keystorePassword().toCharArray();

      final KeyStore keyStore = KeyStore.getInstance("PKCS12");
      final InputStream keyStoreStream = WDService.class.getClassLoader()
          .getResourceAsStream(properties.keystoreFileName());
      if (keyStoreStream == null) {
        throw new RuntimeException("Keystore required!");
      }
      keyStore.load(keyStoreStream, password);

      final KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
      keyManagerFactory.init(keyStore, password);

      final TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
      tmf.init(keyStore);

      final SSLContext sslContext = SSLContext.getInstance("TLS");
      sslContext.init(keyManagerFactory.getKeyManagers(), tmf.getTrustManagers(), new SecureRandom());

      https = ConnectionContext.https(sslContext);
    } catch (NoSuchAlgorithmException | KeyManagementException e) {
      log.debug(" while configuring HTTPS." + e.getCause(), e);
    } catch (CertificateException | KeyStoreException | UnrecoverableKeyException | IOException e) {
      log.debug(e.getCause() + " while ", e);
    } catch (Exception e) {
      log.debug(e.getCause() + " Exception", e);
    }

    return https;
  }

Моя проблема: мои параметры хранилища доверенных сертификатов не соблюдаются, хотя я не получаю ошибку как таковую, но эти настройки не работают. Моя система принимает запрос от почтальона, когда я не отправляю с ним сертификат клиента.

Есть ли проблема с алгоритмом, который я использую? или где я могу искать ошибки / проблемы - чтобы я мог двигаться дальше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...