如何在Nest Elastic Client中使用X509证书

时间:2017-02-14 22:26:54

标签: elasticsearch x509certificate nest

我目前正在从Elastic Search 1.7升级到5.2。我知道没有升级路径,这很好。我们最初遇到的一个问题是Nest和ElastiSearch.Net无法附加X509证书,因为它只能使用基本身份验证。为了解决这个问题,我们制作了现有github repos的副本并直接修改了代码以允许它。这最终使我们无法升级,因为我们不能只使用nuget包,因为我们现在有自定义代码。

现在我们正在升级,我试图找出这是否曾经得到纠正。或者,至少我们可以使用任何钩子来获取ElasticClient(在Nest中)或ElasticLowLevelClient(在ElasticSearch.Net中)以获取证书并在进行调用时传递它。

另一种选择是使用PUT请求在初始创建时创建索引,这是我们需要证书的地方。我们遇到的问题是我们需要使用AutoMap方法,因为我们在模型上添加了一些自定义属性,并且需要在创建索引时使用它们。我不确定是否有办法将给定模型的AutoMap结果生成为JSON,只需使用webclient附加证书即可。

如果您需要更多详细信息,请与我们联系。

1 个答案:

答案 0 :(得分: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);