【发布时间】:2018-06-07 16:24:19
【问题描述】:
我有一个 c# .net 客户端使用来自使用 TLS 保护的 RabbitMQ 实例(使用 RabbitMQ.Client)的消息。我使用自签名证书让一切正常运行。
我们已从经认可的 CA 购买了通配符证书以供以后使用。此证书实际上已由根 CA 本身信任的根 CA 的中介机构签署。
由于客户端计算机不信任中间 CA(证书不会安装到本地计算机证书存储中),我们下载了一个 PEM 文件,其中包含构成信任链的所有证书。但是,.net 客户端不会验证此证书,因为它无法建立信任链而失败。
我环顾四周,找不到任何说 .net 无法验证本身包含多个证书的 PEM 证书。如果我将自定义委托分配给 RabbitMQ ConnectionFactory 的 CertificateValidationCallback 属性,我可以看到证书链仅包含一个证书,即由中间 CA 签名的证书。
客户端最终将部署到数百台机器上,因此我们宁愿不必将中间证书部署到所有机器上,然后再继续管理它们。我知道我可以通过将 AcceptablePolicyErrors 属性设置为 SslPolicyErrors.RemoteCertificateChainErrors 来设置关闭链验证,但在我看来这会让事情变得不那么安全。
所以,我有两个主要问题:
- .net 加密验证是否根本不支持包含链中所有其他证书的证书(至少如果该证书是 PEM)?
- 有没有办法解决这个问题?
我使用的是 .net 4.5.2,尽管 .net 4.6.2 和 .net 4.7.1 中也出现了同样的问题。
我在 Windows 7 机器上运行它。 RabbitMQ 节点在 Windows 2012 服务器上运行。
【问题讨论】:
标签: c# .net cryptography rabbitmq