gpt4 book ai didi

c# - RabbitMQ 公开的公钥中包含的证书链

转载 作者:太空宇宙 更新时间:2023-11-03 14:53:22 24 4
gpt4 key购买 nike

我有一个 c# .net 客户端使用来自使用 TLS 保护的 RabbitMQ 实例(使用 RabbitMQ.Client)的消息。我使用自签名证书让一切正常运行。

我们已从经认可的 CA 购买通配符证书以供今后使用。该证书实际上是由根 CA 本身信任的根 CA 的中间机构签署的。

因为中间 CA 不会被客户端机器信任(证书不会安装到本地机器证书存储区),我们下载了一个 PEM 文件,其中包含构成信任链的所有证书。但是,.net 客户端不会验证此证书,因为它无法建立信任链而失败。

我环顾四周,没有发现任何内容表明 .net 无法验证本身包含多个证书的 PEM 证书。如果我将自定义委托(delegate)分配给 RabbitMQ ConnectionFactory 的 CertificateValidationCallback 属性,我可以看到证书链仅包含一个证书,即由中间 CA 签名的证书。

客户端最终将被部署到数百台机器上,因此我们宁愿不必将中间证书部署到所有这些机器上,然后必须继续管理它们。我知道我可以通过将 AcceptablePolicyErrors 属性设置为 SslPolicyErrors.RemoteCertificateChainErrors 来关闭链验证,但在我看来这会降低安全性。

所以,我在这里有两个主要问题:

  1. .net 密码验证是否根本不支持包含链中所有其他证书的证书(至少如果该证书是 PEM)?
  2. 有没有办法解决这个问题?

我使用的是 .net 4.5.2,但同样的问题出现在 .net 4.6.2 和 .net 4.7.1 中。

我在 Windows 7 机器上运行它。 RabbitMQ 节点在 Windows 2012 服务器上运行。

最佳答案

RabbitMQ 团队监控 rabbitmq-users 邮件列表]( https://groups.google.com/forum/#!forum/rabbitmq-users ) 并且有时只在 StackOverflow 上回答问题。


您应该将根 CA 证书和中间 CA 证书(均为 pem 格式)连接到一个文件中,并将其用作 RabbitMQ 的 cacertfile。然后,Erlang VM 应该在 session 建立的握手阶段提供这两个证书,.NET TLS/SSL 代码应该使用它们来验证服务器的证书。

您可以使用 these instructions以帮助对您的环境进行故障排除。如果仍有问题,请跟进邮件列表,我们会提供帮助。谢谢!

关于c# - RabbitMQ 公开的公钥中包含的证书链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50746056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com