如何在 Nest Elastic Client 中使用 X509 证书
How to use X509 certificate with the Nest Elastic Client
我目前正在从 Elastic Search 1.7 升级到 5.2。我知道没有升级路径,这很好。我们最初遇到的一个问题是 Nest 和 ElastiSearch.Net 无法附加 X509 证书,因为它只能使用基本身份验证。为了解决这个问题,我们复制了现有的 github 存储库并直接修改了代码以允许它。这最终是我们长时间无法升级的原因,因为我们不能只使用 nuget 包,因为我们现在有自定义代码。
现在我们正在升级,我想看看这个问题是否得到了补救。或者,至少我们可以使用任何挂钩来让 ElasticClient(在 Nest 中)或 ElasticLowLevelClient(在 ElasticSearch.Net 中)获取证书并在进行调用时传递它。
另一种选择是使用 PUT 请求在初始创建时创建索引,这是我们需要证书的地方。我们遇到的问题是我们需要使用 AutoMap 方法,因为我们在模型上添加了一些自定义属性,并且需要这些属性来创建索引。我不确定是否有办法将给定模型的 AutoMap 结果生成到 JSON,并且只使用网络客户端附加证书。
如果您需要更多详细信息,请告诉我。
可以自定义 NEST 和 Elasticsearch.Net 一直使用到 1.x 的连接。这是通过向传递给 ElasticClient
构造函数的 ConnectionSettings
实例提供您自己的 IConnection
实现来完成的。
首先创建您的自定义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);
我目前正在从 Elastic Search 1.7 升级到 5.2。我知道没有升级路径,这很好。我们最初遇到的一个问题是 Nest 和 ElastiSearch.Net 无法附加 X509 证书,因为它只能使用基本身份验证。为了解决这个问题,我们复制了现有的 github 存储库并直接修改了代码以允许它。这最终是我们长时间无法升级的原因,因为我们不能只使用 nuget 包,因为我们现在有自定义代码。
现在我们正在升级,我想看看这个问题是否得到了补救。或者,至少我们可以使用任何挂钩来让 ElasticClient(在 Nest 中)或 ElasticLowLevelClient(在 ElasticSearch.Net 中)获取证书并在进行调用时传递它。
另一种选择是使用 PUT 请求在初始创建时创建索引,这是我们需要证书的地方。我们遇到的问题是我们需要使用 AutoMap 方法,因为我们在模型上添加了一些自定义属性,并且需要这些属性来创建索引。我不确定是否有办法将给定模型的 AutoMap 结果生成到 JSON,并且只使用网络客户端附加证书。
如果您需要更多详细信息,请告诉我。
可以自定义 NEST 和 Elasticsearch.Net 一直使用到 1.x 的连接。这是通过向传递给 ElasticClient
构造函数的 ConnectionSettings
实例提供您自己的 IConnection
实现来完成的。
首先创建您的自定义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);