0

我使用Elasticsearch Azure Marketplace模板在 Azure 中部署了一个 ElasticSearch 集群。

我使用 SSL/TLS 对其进行了配置,以便通过应用程序网关通过 HTTP 层与 Elasticsearch 通信,一切正常,我可以登录 Kibana 并查看集群节点的状态。

问题是我无法从客户端通过 Azure 应用程序网关使用 NEST.NET 连接到 ElasticSearch,它需要我在提交模板时提供的证书和密码,但是当我设置它时,我得到“无法从传输中读取数据连接”“无法建立 SSL 连接,请参阅内部异常。” 当我发送请求时。

这是我从客户端连接到 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);
    }
4

1 回答 1

0

在这种情况下,证书不用于 Elasticsearch 的证书身份验证,因为该ClientCertificate方法用于,但用于传输层安全性 (TLS)。

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提供AuthorityPartOfChainAuthorityIsRoot,具体取决于客户端配置的证书是链的一部分还是根证书。

于 2018-08-26T08:19:31.793 回答