Я использую 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;
}
Моя проблема: мои параметры хранилища доверенных сертификатов не соблюдаются, хотя я не получаю ошибку как таковую, но эти настройки не работают. Моя система принимает запрос от почтальона, когда я не отправляю с ним сертификат клиента.
Есть ли проблема с алгоритмом, который я использую? или где я могу искать ошибки / проблемы - чтобы я мог двигаться дальше