簡體   English   中英

說服 java 通過 SSL 與“localstack”對話

[英]Convincing java to talk to “localstack” via SSL

我希望使用localstack來模擬 elasticsearch/kinesis/dynamo。 我的彈性代碼想要 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

我試過了:

  • 使用 USE_SSL 環境變量集啟動 localstack。 curl 命令(例如“curl -k https://localhost:port ”)用於彈性工作,但 java 沒有。
  • 使用 localstack 注釋 ("@RunWith(LocalstackDockerTestRunner.class)" 並傳入 "USE_SSL" 作為參數 - 沒有 go
  • 通過System.setProperty(SDKGlobalConfiguration.DISABLE_CERT_CHECKING_SYSTEM_PROPERTY, "true"); - 沒有 go
  • 傳遞命令行參數-Dcom.amazonaws.sdk.disableCertChecking - 沒有 go

我覺得我正在尋找的是可行的.. 只是似乎無法找到正確的設置組合。

如果您自己創建RestHighLevelClient (或控制此對象的創建),則可以使用接受RestClientBuilder的構造函數。

使用RestClient.builder()方法創建一個帶有自定義SSLContextRestClientBuilder 以下來自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);

以上內容完全未經測試,但可以幫助您入門。 如果它適合您,請隨時使用更多詳細信息更新此答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM