使用传输客户端的安全弹性连接

2024-02-14

需要使用 java 代码中的传输客户端连接到具有 https 身份验证的安全弹性搜索。我有用户 ID 和密码来连接安全弹性。我使用的是elasticsearch 7.10.0。

try {
            Settings settings = Settings.builder().put("cluster.name", clusterName)
                    .put("xpack.security.user", "elastic:elastic")      
                    .put("xpack.security.transport.ssl.enabled", "true")
                    .put("xpack.ssl.key", "/etc/elasticsearch/elasticsearch.keystore")
                    .put("xpack.ssl.certificate", "/etc/elasticsearch/elastic-certificates.p12")
                    .put("xpack.ssl.certificate_authorities", "/etc/elasticsearch/elastic-stack-ca.p12")
                    .put("xpack.security.transport.ssl.enabled", "true")
                    .build();
            ESclient = new PreBuiltTransportClient(settings);

            //changes for add multiple IP address
            String[] hosts = elasticHost.split(",");
            for (String host : hosts) {
                ESclient.addTransportAddress(new TransportAddress(InetAddress.getByName(host.trim()), elasticPort));
            }
            System.out.println(ESclient.settings());
        } catch (UnknownHostException ex) {
            System.out.println("Exception :" + ex);
            //logger.error("Exception : " + ex);
            throw ex;
        }

但它显示错误:

java.lang.IllegalArgumentException: unknown setting [xpack.security.transport.ssl.enabled] please check that any required plugins are installed, or check the breaking changes documentation for removed settings

请让我知道上面的代码中缺少什么。提前致谢。


您不应该再使用 TCP 传输客户端,因为它已经被7.0 中已弃用 https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/transport-client.html。相反,你应该使用休息客户端 https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html它通过 HTTP 与您的集群进行通信。

如果您需要通过以下方式沟通集群的 HTTPS https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/_encrypted_communication.html,以下是如何使用 REST 客户端执行此操作:

// 1. create an SSL context to trust the CA that signed the ES server certificate
String keyStorePass = "keystorePassword";
Path trustStorePath = Paths.get("/etc/elasticsearch/elastic-stack-ca.p12");
KeyStore truststore = KeyStore.getInstance("pkcs12");
try (InputStream is = Files.newInputStream(trustStorePath)) {
    truststore.load(is, keyStorePass.toCharArray());
}
SSLContextBuilder sslBuilder = SSLContexts.custom().loadTrustMaterial(truststore, null);
final SSLContext sslContext = sslBuilder.build();

// 2. Basic authentication
final CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic", "password"));

// 3. Changes for add multiple IP address
String[] hosts = elasticHost.split(",");
HttpHost[] httpHosts = Arrays.stream(hosts)
     .map(host -> new HttpHost(host.trim(), elasticPort, "https"))
     .collect(Collectors.toList())
     .toArray(new HttpHost[hosts.length]);

// 4. Build the low-level client
RestClientBuilder builder = RestClient.builder(httpHosts)
    .setHttpClientConfigCallback(new HttpClientConfigCallback() {
        @Override
        public HttpAsyncClientBuilder customizeHttpClient(
                HttpAsyncClientBuilder httpClientBuilder) {

            // set Basic credentials
            httpClientBuilder.setDefaultCredentialsProvider(credsProvider);
            // set SSL context
            return httpClientBuilder.setSSLContext(sslContext);
        }
    });

// 5. Build the high-level client
RestHighLevelClient client = new RestHighLevelClient(builder);

如果您需要迁移Java代码以使用新的RETS客户端,官方文档提供了分步指南 https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.0/java-rest-high-level-migration.html关于需要做什么。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用传输客户端的安全弹性连接 的相关文章

随机推荐

  • Firestore:文档父名称缺少“/”

    我正在使用 jest 对 firestore 执行集成测试 我期望收到包含等于 field1 和 field2 的字段的文档 但是 我收到了以下错误 我尝试在 firecase 控制台中创建复合索引 但问题仍然存在 这种情况似乎只在测试期间
  • Django:分配外键 - 无法获取类的代表

    我在这里问这个问题是因为 在我的搜索中 这个错误通常与查询有关 而不是与外键分配有关 我收到的错误发生在模型的方法中 这是代码 class Deal models Model model fields def update existing
  • 为什么 Node.js 异步模块在使用 async.eachLimit(array, limit, function, callback) 的第一步后停止?

    如果我使用这段代码 async eachLimit body photos photo 10 function photo var flickr getphoto path request get url flickr host url f
  • 从命令行检测 Apple Silicon

    如何从 shell 脚本中检测到它正在 M1 Apple 硬件上运行 我希望能够运行命令行命令 以便我可以编写if 其主体仅在具有 M1 处理器的 Mac 上运行时才会执行 当然至少是 macOS Big Sur uname m 将返回ar
  • CMake找不到NVIDIA的opencl sdk

    我刚刚安装了 NVIDIA CUDA 工具套件 用它在 Windows 8 1 上开发 OpenCL 应用程序 我遇到了一些问题 1 FinedOpenCl cmake 不起作用 因为 Nvidia 工具包未设置 opencl dir cm
  • PHP:XML 文件到字符串,使用 asXML() 的 file_get_contents 或 simplexml_load_file 更快

    我正在编写一个代理服务来缓存我的移动应用程序对网络服务进行的查询 就像中间的一个人 我构建的代理站点的任务是将其从应用程序获取的查询传递到第三方 Web 服务 并将来自第三方 Web 服务的响应保存为 XML 文件 并为同一查询的所有后续调
  • 隐式类型转换优先级是如何确定的?

    这是代码 class A public int val char cval A val 10 cval a operator char const return cval operator int const return val int
  • 无法使用 PowerMockito/Mockito 模拟 URL 类

    我正在尝试使用 PowerMockito 来模拟我正在测试的代码中 java net URL 类的创建 基本上 我想防止发生真正的 HTTP 请求 而是 1 在发出请求时检查数据 2 在模拟响应上提供我自己的测试数据 这就是我正在尝试的 R
  • awk 中比较连续行

    我想使用 awk 命令比较文件中的连续行 这是输入和输出的示例 输入文件 6 7 8 9 10 4 5 6 我想要的输出文件是这样的 6 7 8 9 10 14 15 16 基本上我想比较当前行是否大于前一行 并继续打印前一行和当前行 一旦
  • 如何采取行动关闭 NSPopover?

    您好 我在我的一个应用程序中实现了 NSPopover 但弹出窗口不会关闭 我猜一旦我单击其他内容 它应该关闭 但事实并非如此 我知道有一个关闭弹出窗口操作 但这只适用于不同的按钮 当我按下同一按钮时 如何才能看到弹出窗口已打开以及何时打开
  • 使用泛型从枚举中获取最大值

    如何使用泛型从枚举中获取最大 int 值 我已尝试以下操作 但它显示以下编译错误 无法将 T 隐式转换为 int int maxValue GetMaxValue
  • 如何在 2019.3 中删除我的 IntelliJ 许可证?

    我安装了 JetBrains IntelliJ 如何删除许可证设置 我可以在以下位置找到许可证详细信息Help gt Register 菜单 但这不允许我删除许可证设置或输入无效数据 例如不存在的许可证服务器 用例 我安装了一个许可证服务器
  • 是否可以在 Spring MVC REST 端点中验证 @RequestParam?

    在 Jersey 2 中可以这样做 GET PATH user email public IDto getUser NotNull Email PathParam email String validEmail return userMan
  • 如何将列表转换为队列来实现先进先出

    考虑 public List
  • 数组公式中当前行中的 COUNTA (Google 表格)

    我有一个具有固定数量的列和动态行的 Google 工作表 我喜欢使用 countA 来计算当前行中具有值 非空白 的字段 我找到了一个公式在这里 https productforums google com forum topic docs
  • Android权限保护级别18和50

    当我转储 Nexus 7 上所有应用程序的所有权限时 我 如预期 获得保护级别为 0 正常 1 危险 2 签名 的权限 3 SIGNATURE OR SYSTEM 以下没有任何记录 但也有很多权限的保护级别设置为 18 有些权限设置为 50
  • 相机在 android 2.2 上不工作

    在Android SDK和AVD Manager中 我创建了一个新的android虚拟设备 如下所示 姓名 myavd 目标 Android 2 2 API 级别 8 SD 卡 50MiB 内置 默认 HVGA 硬件 抽象 LCD 密度 1
  • LdapConnection 与 PrimaryContext

    我有以下两种使用 LDAP 和 LDAPS 验证用户身份的实现 我想知道哪个更好 更正确 郑重声明 这两种方法都适用于 SSL 和非 SSL 连接 我也很好奇 因为当在 Wireshark 上观看时Non SSL PrincipalCont
  • php中usort()函数如何工作

    我查看了 php 文档 在线教程 但没有看到 usort 是如何实际工作的 我在下面有一个我正在玩的例子 data array array msg gt some text month gt 11 level gt 10 array msg
  • 使用传输客户端的安全弹性连接

    需要使用 java 代码中的传输客户端连接到具有 https 身份验证的安全弹性搜索 我有用户 ID 和密码来连接安全弹性 我使用的是elasticsearch 7 10 0 try Settings settings Settings b