java - 如何在 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 找到类似的方法。
解决方案
由于证书中的主机名不是 localhost,因此您将遇到此问题,因此要解决此问题,您需要禁用 SSL 主机名验证,通过执行以下操作,您将始终返回 true,这将跳过验证。
RestClientBuilder restClientBuilder = RestClient.builder(HttpHost);
restClientBuilder.setHttpClientConfigCallback(httpAsyncClientBuilder ->
httpAsyncClientBuilder.setSSLHostnameVerifier((s, sslSession) -> true));
new RestHighLevelClient(restClientBuilder);
推荐阅读
- node.js - 如何使用 Firebase 在 Express 中修复“错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法删除标头”?
- python - 获得排序数组所需的最小交换
- php - 如何使用 htaccess 重写规则简化 PHP 站点 URL?
- json - 无法使用正则表达式匹配整数值 - 错误(在
:6): 数字不是字符串或数组 - python - 如何操作数据框中的移位函数以跳过行并仅移位选择的行
- spring-boot - 如何在 Android Studio 中正确停止 Spring Boot 应用程序?
- django - 如何在弹性搜索中运行查询和过滤的组合?
- cmd - 使用 cmd findstr 时,如何在文本文件中实际找不到匹配项时输出“未找到匹配项”?
- python - 在中间步骤中引用链式 Pandas DF
- r - 是否有 r 函数可以帮助我找到携带特定年份数据的行数?