[英]Connect to an Azure hosted ElasticSearch endpoint through a SSL offloading Application Gateway
我已使用模板Elasticsearch Azure Marketplace在Azure中部署ElasticSearch集群。
我為它配置了SSL / TLS,以便通過Application Gateway通過HTTP層與Elasticsearch進行通信,並且一切正常,我可以登錄到Kibana並查看集群節點的狀態。
問題是我無法從客戶端通過Azure應用網關使用NEST.NET通過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);
}
在這種情況下,該證書不用於對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
,分別取決於配置客戶端的證書是鏈的一部分還是根證書。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.