说服java与“对话”;localstack";通过SSL
我希望用它来模拟弹性搜索/运动/发电机。我的弹性代码需要HTTPS端点,因此遇到了麻烦 通过Java11/IntelliJ进行测试 在所有情况下,我都会遇到以下错误:说服java与“对话”;localstack";通过SSL,java,amazon-web-services,elasticsearch,Java,Amazon Web Services,elasticsearch,我希望用它来模拟弹性搜索/运动/发电机。我的弹性代码需要HTTPS端点,因此遇到了麻烦 通过Java11/IntelliJ进行测试 在所有情况下,我都会遇到以下错误: Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid
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”)用于弹性工作,但java没有
- 使用localstack注释(@RunWith(LocalstackDockerTestRunner.class)”并将“USE_SSL”作为参数传递-禁止
- 通过
-不行System.setProperty(SDKGlobalConfiguration.DISABLE\u CERT\u CHECKING\u System\u PROPERTY,true)告诉Java忽略“坏”证书;
- 正在传递cmdline param
-禁止-Dcom.amazonaws.sdk.disableCertChecking
我觉得我正在寻找的是可行的。只是似乎找不到正确的设置组合。如果您自己创建
RestHighLevelClient
(或控制此对象的创建),您可以使用接受RestClientBuilder
的构造函数
使用RestClient.builder()
方法创建带有自定义SSLContext
的RestClientBuilder
。以下内容来自:
在您的情况下,需要创建信任所有主机的SSLContext:
SSLContext context=SSLContext.getInstance(“SSL”)
context.init(null,新TrustManager[]{
新X509TrustManager{
void checkClientTrusted(X509Certificate[]链,字符串authType){}
void checkServerTrusted(X509Certificate[]链,字符串authType){}
void getAcceptedAssuers(){return null;}
}
},空);
以上内容完全未经测试,但可能会让您开始。如果对您有效,请随时更新此答案,并提供更多详细信息。您尝试过调查吗?刚刚调查过。没有什么不同-相同的错误。我觉得AWS忽略了所有“相信一切”消息;您如何访问Elasticsearch?使用一些现成的库?使用java的原始HTTPSURLConnection?使用Apache HTTPClient?使用Java11新的HTTPClient?使用RestHighLevelClient-这是注入的-您是如何从cmdline运行java应用程序的?
java-Dcom.amazonaws.sdk.disableCertChecking-jar my.jar
或java-jar my.jar-Dcom.amazonaws.sdk.disableCertChecking
?第一个版本应该可以工作。放置这个的位置会产生巨大的差异。
RestClientBuilder builder = RestClient.builder(
new HttpHost("localhost", 9200, "https"))
.setHttpClientConfigCallback(new HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(
HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder.setSSLContext(sslContext);
}
});