【发布时间】:2020-04-14 14:13:25
【问题描述】:
我想使用 Java REST API (RestHighLevelClient) 通过 HTTPS 与 Elasticsearch 5.6 服务器进行通信。但是,服务器的证书是自签名的,当我尝试连接时,它会引发 SSLHandshakeException。
有没有办法将 REST 客户端配置为接受自签名证书?
【问题讨论】:
标签: java rest elasticsearch ssl-certificate
我想使用 Java REST API (RestHighLevelClient) 通过 HTTPS 与 Elasticsearch 5.6 服务器进行通信。但是,服务器的证书是自签名的,当我尝试连接时,它会引发 SSLHandshakeException。
有没有办法将 REST 客户端配置为接受自签名证书?
【问题讨论】:
标签: java rest elasticsearch ssl-certificate
我使用自定义的 Java 密钥库来完成这项工作。这是我的代码:
CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
final SSLContext sslContext = SSLContexts.custom()
.loadTrustMaterial(new File("my_keystore.jks"), keystorePassword.toCharArray(),
new TrustSelfSignedStrategy())
.build();
RestClient client = RestClient.builder(new HttpHost(host, port, scheme)).setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
.setDefaultCredentialsProvider(credentialsProvider)
.setSSLContext(sslContext)
).build();
为了创建密钥库,我通过 Firefox 下载了域的证书,并使用了:
keytool -import -v -trustcacerts -file my_domain.crt -keystore my_keystore.jks -keypass password -storepass password
【讨论】: