首页 > 其他 > 详细

ElasticSearch-NEST -03Working with certificatesedit(使用证书) (官网谷歌翻译)

时间:2021-04-08 01:22:23      阅读:50      评论:0      收藏:0      [点我收藏+]
Working with certificatesedit(使用证书)
  如果您已通过Elastic Stack Security功能在Elasticsearch上启用了SSL,或者通过Elasticsearch前面的代理启用了SSL,并且生成证书的证书颁发机构(CA)受运行客户端代码的计算机信任,那么您将没有任何选择与客户端通过HTTPS与集群通信。
如果您使用自己的不受信任的CA,默认情况下,.NET将不允许您对该端点进行HTTPS调用。借助.NET Framework,您可以通过全局静态ServicePointManager.ServerCertificateValidationCallback上的自定义验证回调来抢先使用此功能。您会发现执行此操作的大多数示例都将仅从验证回调中返回true,并愉快地鸣叫直至日落。建议不要这样做,因为它允许在当前AppDomain中通过任何HTTPS通信,而无需进行任何验证。这是一个具体的例子:
假设您部署了一个Web应用程序,该Web应用程序使用NEST通过HTTPS与Elasticsearch进行通信,并且还使用了一些第三方SOAP / WSDL端点。通过设置以下内容
ServicePointManager.ServerCertificateValidationCallback +=
(sender, cert, chain, errors) => true
  不会对与Elasticsearch和该外部Web服务的HTTPS连接执行验证。
 
Validation configuration(验证配置)
 
  也可以使用.NET设置每个服务端点的回调,并且Elasticsearch.NET和NEST都通过连接设置(使用Elasticsearch.Net的ConnectionConfiguration和使用NEST的ConnectionSettings)公开该回调。您可以在该处理程序中进行自己的验证,也可以在静态类  CertificateValidations上使用开箱即用的内置处理程序之一。
  最基本的两个是AllowAll和DenyAll,它们分别接受或拒绝到我们节点的所有SSL流量。这里有几个例子。
 
Denying all certificate validationedit(拒绝所有证书验证)
  在这里,我们使用拒绝所有证书验证的验证回调来设置ConnectionSettings
[IntegrationOnly]
public class DenyAllCertificatesCluster : SslAndKpiXPackCluster
{
protected override ConnectionSettings ConnectionSettings(ConnectionSettings s) => s
.ServerCertificateValidationCallback((o, certificate, chain, errors) => false)
.ServerCertificateValidationCallback(CertificateValidations.DenyAll); ①
}
  ① 使用lambda表达式或CertificateValidations.DenyAll拒绝所有验证
 
Allowing all certificate validationedit(允许所有证书验证)
 
  在这里,我们使用允许所有证书验证的验证回调来设置ConnectionSettings
public class AllowAllCertificatesCluster : SslAndKpiXPackCluster
{
protected override ConnectionSettings ConnectionSettings(ConnectionSettings s) => s
.ServerCertificateValidationCallback((o, certificate, chain, errors) => true)
.ServerCertificateValidationCallback(CertificateValidations.AllowAll); ①
}
 
  ①使用lambda表达式或CertificateValidations.AllowAll允许所有验证
 
Allowing certificates from a Certificate Authorityedit(允许来自证书颁发机构的证书)
  如果您的客户端应用程序可以在本地访问公共CA证书,则Elasticsearch.NET和NEST附带了一些方便的帮助程序,可以断言服务器提供的证书是来自本地CA的证书。
如果您使用elasticsearch-certutil工具生成SSL证书,则生成的节点证书在证书链中不包括CA,以减少SSL握手的大小。在那种情况下,您可以使用CertificateValidations.AuthorityIsRoot并将其传递给您的CA公钥本地副本,以断言所提供的服务器证书是使用该证书生成的
[IntegrationOnly]
public class CertgenCaCluster : SslAndKpiXPackCluster
{
public CertgenCaCluster() : base() { }
public CertgenCaCluster(SslAndKpiClusterConfiguration configuration) : base(configuration) { }
protected override ConnectionSettings ConnectionSettings(ConnectionSettings s) => s
.ServerCertificateValidationCallback(
CertificateValidations.AuthorityIsRoot(new X509Certificate(this.ClusterConfiguration.FileSystem.CaCertificate))
);
}
  如果您的本地副本与服务器的CA不匹配,则客户端将无法连接
[IntegrationOnly]
public class BadCertgenCaCluster : SslAndKpiXPackCluster
{
protected override ConnectionSettings ConnectionSettings(ConnectionSettings s) => s
.ServerCertificateValidationCallback(
CertificateValidations.AuthorityPartOfChain(new X509Certificate(this.ClusterConfiguration.FileSystem.UnusedCaCertificate))
);
}
  如果您寻求供应商生成的SSL证书,则通常的做法是在证书链中包含CA和所有中间CA。使用此类证书时,请使用CertificateValidations.AuthorityPartOfChain来验证本地CA证书是否是用于生成服务器密钥的链的一部分。

ElasticSearch-NEST -03Working with certificatesedit(使用证书) (官网谷歌翻译)

原文:https://www.cnblogs.com/xianchengzhang/p/14629959.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!