2017-02-14 3 views
0

В настоящее время я модернизируюсь от Elastic Search 1.7 до 5.2. Я знаю, что нет пути обновления, и это нормально. Одна из проблем, с которой мы столкнулись первоначально, - с Nest и ElastiSearch.Net, не смогла подключить сертификат X509, поскольку у нее была возможность использовать базовую аутентификацию. Чтобы обойти это, мы сделали копии существующих репозиториев github и модифицировали код, чтобы разрешить его. В конечном итоге это не позволяет нам модернизировать, так как мы не могли просто использовать пакеты nuget, потому что теперь у нас был собственный код.Как использовать сертификат X509 с клиентом Nest Elastic

Теперь, когда мы обновляемся, я пытаюсь выяснить, было ли это когда-либо исправлено. Или, по крайней мере, есть крючки, которые мы можем использовать, чтобы получить ElasticClient (в Nest) или ElasticLowLevelClient (в ElasticSearch.Net), чтобы взять сертификат и передать его при совершении вызова.

Другой вариант - использовать запрос PUT для создания Индекса при первоначальном создании, где нам нужен сертификат. Проблема, которую мы имеем там, требует использования метода AutoMap, поскольку у нас есть некоторые пользовательские атрибуты, добавленные на наших моделях, и им нужны те, которые нужно включить в создание индекса. Я не уверен, есть ли способ генерировать этот результат AutoMap для данной модели для JSON и просто использовать веб-клиент для присоединения сертификата.

Сообщите мне, если вам нужно больше деталей.

ответ

0

Можно настроить соединения, которые используются как NEST, так и Elasticsearch.Net, вплоть до 1.x. Это делается путем предоставления вашей собственной реализации IConnection экземпляру ConnectionSettings, который передается в конструктор ElasticClient.

Сначала создайте свой собственный IConnection; это проще всего вывести из HttpConnection

public class HttpConnectionWithClientCertificate : HttpConnection 
{ 
    protected override HttpWebRequest CreateHttpWebRequest(RequestData requestData) 
    { 
     var request = base.CreateHttpWebRequest(requestData); 
     // add the certificate to the request 
     request.ClientCertificates.Add(new X509Certificate("path_to_cert")); 
     return request; 
    } 
} 

затем передать это ConnectionSettings

var node = new Uri("http://localhost:9200"); 
var connectionPool = new SingleNodeConnectionPool(node); 
var connection = new HttpConnectionWithClientCertificate(); 
var settings = new ConnectionSettings(connectionPool, connection); 
var client = new ElasticClient(config); 
Смежные вопросы