首页 > 解决方案 > 如何在 Java 中禁用 Elasticsearch RestClient v6.7.0 的 SSL 验证

问题描述

我正在尝试连接到 ssh 隧道后面的 elasticsearch 实例。elasticsearch 实例的域*.ap-south-1.es.amazonaws.com在本地隧道上,我通过localhost:9201.

这是我用来连接到 elasticsearch 的代码

RestHighLevelClient(RestClient.builder(HttpHost("localhost", 9201, "https")))

我收到以下错误

javax.net.ssl.SSLPeerUnverifiedException: Host name 'localhost' does not match the certificate subject provided by the peer (CN=*.ap-south-1.es.amazonaws.com)

我在使用 PHP-Elasticsearch 时遇到了这个错误,我使用它修复了它

$esClient->setSSLVerification(false);

我希望为 Java RestClient 找到类似的方法。

标签: javaelasticsearch

解决方案


由于证书中的主机名不是 localhost,因此您将遇到此问题,因此要解决此问题,您需要禁用 SSL 主机名验证,通过执行以下操作,您将始终返回 true,这将跳过验证。

RestClientBuilder restClientBuilder =  RestClient.builder(HttpHost);
restClientBuilder.setHttpClientConfigCallback(httpAsyncClientBuilder ->
   httpAsyncClientBuilder.setSSLHostnameVerifier((s, sslSession) -> true));
new RestHighLevelClient(restClientBuilder);

推荐阅读