Получение ошибки «TLSv1.3 не поддерживается» при подключении к elastic search с использованием транспортного клиента Java

#java #elasticsearch #elk #elasticsearch-x-pack #xpack

#java #elasticsearch #elk #elasticsearch-x-pack #xpack

Вопрос:

Я пытаюсь безопасно подключиться к elastic search (7.8) через Java transport client. Я использовал x-pack для обеспечения подключения к elastic search. Я не могу создать объект 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
  

Ниже приведен код подключения, который я использую для подключения к elastic search через транспортный порт 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));
  

ключ и сертификат elastic search я использую те же, которые я добавил в файл elasticsearch.yml для обеспечения безопасности.

Примечание: — Когда я запускаю этот код подключения без использования сервера tomcat, соединение работает отлично, но с сервером tomcat оно выдает эту ошибку.

Итак, я в замешательстве: либо мне нужно внести некоторые изменения на стороне tomcat, либо причиной этого является несоответствие версии elastic search, поддерживающей jars.

Кто-нибудь может помочь мне здесь?

Спасибо

Комментарии:

1. Какая у вас полная версия JDK?

2. Я использую jdk1.8.0_251

3. Первоначально выпущенная Java 8 (а также 9 и 10, но они сейчас не поддерживаются) не поддерживала TLSv1.3; она была добавлена всего несколько недель назад в 8u261

4. да, но тот же код подключения отлично работает с текущим JDK, когда я пытаюсь запустить без развертывания на сервере tomcat.