Убедительная Java для общения с "localalstack" через SSL - PullRequest
2 голосов
/ 24 сентября 2019

Я надеюсь использовать localstack для имитации эластичного поиска / кинезиса / динамо.У меня проблемы с моим эластичным кодом, требующим конечных точек HTTPS.

Тестирование через Java 11 / IntelliJ

Во всех случаях я получаю эту ошибку:

Caused by: sun.security.validator.ValidatorException: PKIX path building failed: 
 sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid 
 certification path to requested target

Я пробовал:

  • Запускlocalstack с установленной переменной окружения USE_SSL.команды curl (например, curl -k https://localhost:port") для упругой работы, но java - нет.
  • Использование аннотаций localstack ("@RunWith (LocalstackDockerTestRunner.class)" и передача в качестве параметра USE_SSL)- не идти
  • Указание Java игнорировать «плохие» сертификаты с помощью System.setProperty(SDKGlobalConfiguration.DISABLE_CERT_CHECKING_SYSTEM_PROPERTY, "true"); - не идти
  • Передача параметра cmdline -Dcom.amazonaws.sdk.disableCertChecking - не идти

Я чувствуюкак то, что я ищу, выполнимо ... просто не могу найти правильную комбинацию настроек.

1 Ответ

0 голосов
/ 25 сентября 2019

Если вы создаете RestHighLevelClient самостоятельно (или управляете созданием этого объекта), вы можете использовать конструктор, который принимает RestClientBuilder.

Используйте метод RestClient.builder() для создания RestClientBuilder с кастомом SSLContext.Следующее от Исходный код Elasticsearch :

        RestClientBuilder builder = RestClient.builder(
            new HttpHost("localhost", 9200, "https"))
            .setHttpClientConfigCallback(new HttpClientConfigCallback() {
                @Override
                public HttpAsyncClientBuilder customizeHttpClient(
                        HttpAsyncClientBuilder httpClientBuilder) {
                    return httpClientBuilder.setSSLContext(sslContext);
                }
            });

В вашем случае вам нужно создать SSLContext, который доверяет всем хостам:

SSLContext context = SSLContext.getInstance("SSL")
context.init(null, new TrustManager[] {
  new X509TrustManager {
    void checkClientTrusted(X509Certificate[] chain, String authType) {}
    void checkServerTrusted(X509Certificate[] chain, String authType) {}
    void getAcceptedIssuers() { return null; }
  }
}, null);

Выше полностьюне проверено, но может помочь вам начать.Не стесняйтесь обновить этот ответ с более подробной информацией, если он работает для вас.

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