gpt4 book ai didi

java - 说服 java 通过 SSL 与 "localstack"对话

转载 作者:行者123 更新时间:2023-11-30 12:03:01 27 4
gpt4 key购买 nike

我希望使用 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 命令(EG“curl -k https://localhost:port”)用于弹性工作,但 java 没有。
  • 使用 localstack 注释(“@RunWith(LocalstackDockerTestRunner.class)”并将“USE_SSL”作为参数传递 - 不行
  • 通过 System.setProperty(SDKGlobalConfiguration.DISABLE_CERT_CHECKING_SYSTEM_PROPERTY, "true"); 告诉 Java 忽略“坏”证书; - 不行
  • 传递 cmdline 参数 -Dcom.amazonaws.sdk.disableCertChecking - 不行

我觉得我正在寻找的东西是可行的..只是似乎无法找到正确的设置组合。

最佳答案

如果您自己创建RestHighLevelClient(或控制此对象的创建),您可以使用接受RestClientBuilder 的构造函数。

使用 RestClient.builder() 方法创建一个带有自定义 SSLContextRestClientBuilder。以下来自Elasticsearch source code :

        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);

以上内容完全未经测试,但可能会让您入门。如果适合您,请随时使用更多详细信息更新此答案。

关于java - 说服 java 通过 SSL 与 "localstack"对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58070809/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com