通过 SSL 卸载应用程序网关连接到 Azure 托管的 ElasticSearch 端点
Connect to an Azure hosted ElasticSearch endpoint through a SSL offloading Application Gateway
我已经使用模板 Elasticsearch Azure Marketplace 在 Azure 中部署了 ElasticSearch 集群。
我将其配置为 SSL/TLS 通过应用程序网关通过 HTTP 层与 Elasticsearch 通信,一切正常,我可以登录 Kibana 并查看我的集群节点的状态。
问题是我无法使用 NEST.NET 从客户端通过 Azure 应用程序网关连接到 ElasticSearch,它需要我在提交模板时提供的证书和密码,但是当我设置它时我得到 "Unable to read data from the transport connection" 和 "The SSL connection could not be established, see inner exception." 当我发送请求时。
这是我在客户端连接到 ElasticSearch 时使用的代码:
public IElasticClient Client { get; }
public ElasticService(IConfiguration configuration)
{
var settings = new ConnectionSettings(new Uri(configuration["Elastic:Endpoint"]))
.DefaultIndex("impression");
settings.ClientCertificate(new X509Certificate2(@"C:\git\server.p12", "PASSWORD", X509KeyStorageFlags.Exportable));
Client = new ElasticClient(settings);
}
本例中的证书不用于 Elasticsearch 的证书身份验证,因为 ClientCertificate
方法用于,但用于传输层安全性 (TLS)。
可以使用 ServerCertificateValidationCallback
设置 TLS 证书
var pool = new SingleNodeConnectionPool(new Uri(configuration["Elastic:Endpoint"]));
var settings = new ConnectionSettings(pool)
.DefaultIndex(defaultIndex)
.BasicAuthentication("elastic", "<password>")
.ServerCertificateValidationCallback(
CertificateValidations.AuthorityPartOfChain(
new X509Certificate2(@"C:\git\server.p12", "PASSWORD"))
);
var client = new ElasticClient(settings);
根据传递给应用程序网关的证书的生成方式,CertificateValidations
提供 AuthorityPartOfChain
和 AuthorityIsRoot
,具体取决于客户端配置的证书是否属于链,或分别是根证书。
我已经使用模板 Elasticsearch Azure Marketplace 在 Azure 中部署了 ElasticSearch 集群。
我将其配置为 SSL/TLS 通过应用程序网关通过 HTTP 层与 Elasticsearch 通信,一切正常,我可以登录 Kibana 并查看我的集群节点的状态。
问题是我无法使用 NEST.NET 从客户端通过 Azure 应用程序网关连接到 ElasticSearch,它需要我在提交模板时提供的证书和密码,但是当我设置它时我得到 "Unable to read data from the transport connection" 和 "The SSL connection could not be established, see inner exception." 当我发送请求时。
这是我在客户端连接到 ElasticSearch 时使用的代码:
public IElasticClient Client { get; }
public ElasticService(IConfiguration configuration)
{
var settings = new ConnectionSettings(new Uri(configuration["Elastic:Endpoint"]))
.DefaultIndex("impression");
settings.ClientCertificate(new X509Certificate2(@"C:\git\server.p12", "PASSWORD", X509KeyStorageFlags.Exportable));
Client = new ElasticClient(settings);
}
本例中的证书不用于 Elasticsearch 的证书身份验证,因为 ClientCertificate
方法用于,但用于传输层安全性 (TLS)。
可以使用 ServerCertificateValidationCallback
var pool = new SingleNodeConnectionPool(new Uri(configuration["Elastic:Endpoint"]));
var settings = new ConnectionSettings(pool)
.DefaultIndex(defaultIndex)
.BasicAuthentication("elastic", "<password>")
.ServerCertificateValidationCallback(
CertificateValidations.AuthorityPartOfChain(
new X509Certificate2(@"C:\git\server.p12", "PASSWORD"))
);
var client = new ElasticClient(settings);
根据传递给应用程序网关的证书的生成方式,CertificateValidations
提供 AuthorityPartOfChain
和 AuthorityIsRoot
,具体取决于客户端配置的证书是否属于链,或分别是根证书。