我正在尝试通过 Java 传输客户端安全地连接到弹性搜索(7.8)。我使用 x-pack 来保护弹性搜索连接。由于以下错误,我无法创建 Client 的对象。
2020-08-13 17:43:24 [main] DEBUG XPackSettings:199 - TLSv1.3 is not supported
java.security.NoSuchAlgorithmException: TLSv1.3 SSLContext not available
at sun.security.jca.GetInstance.getInstance(GetInstance.java:159) ~[?:1.8.0_251]
at javax.net.ssl.SSLContext.getInstance(SSLContext.java:156) ~[?:1.8.0_251]
at org.elasticsearch.xpack.core.XPackSettings.<clinit>(XPackSettings.java:196) [x-pack-core-7.8.1.jar:7.8.1]
我正在使用 Java 1.8 并支持 jars 以及下面列出的版本。
elasticsearch-7.8.0.jar r
elasticsearch-cli-7.8.0.jar
elasticsearch-core-7.8.0.jar
elasticsearch-geo-7.8.0.jar
elasticsearch-nio-7.8.1.jar
elasticsearch-rest-client-7.8.1.jar
elasticsearch-secure-sm-7.8.0.jar
elasticsearch-ssl-config-7.8.1.jar
elasticsearch-x-content-7.8.0.jar
x-pack-core-7.8.1.jar
x-pack-transport-7.8.1-1.0.jar
我用来通过传输端口 9300 连接到弹性搜索的连接代码如下。
Client client = new PreBuiltXPackTransportClient(Settings.builder().put("cluster.name",esClusterName)
.put("node.name", esNodeName)
.put("xpack.security.transport.ssl.enabled", true)
.put("request.headers.X-Found-Cluster",esClusterName)
.put("xpack.security.user", elasticSerachCred)
.put("xpack.security.transport.ssl.key", elasticSearchSSLKeyLocation)
.put("xpack.security.transport.ssl.certificate", elasticSearchSSLCertificateLocation)
.put("client.transport.sniff", false)
.build()).addTransportAddress(new TransportAddress(InetAddress.getByName(transportServerName), transportPort));
我使用的弹性搜索密钥和证书与我在 elasticsearch.yml 文件中添加的相同以启用安全性。
注意: - 当我在不通过 tomcat 服务器的情况下运行此连接代码时,连接工作正常,但使用 tomcat 服务器时会出现此错误。
所以,我很困惑,要么我需要在 tomcat 端做一些更改,要么是否有任何支持 jars 版本不匹配的弹性搜索导致这种情况。
有人可以在这里指导我吗?
谢谢