MSMQ:签名无效-如何解决?

时间:2019-09-25 15:47:30

标签: .net active-directory msmq

我用这个把我的头撞在墙上,可以带来一些灵感。

我有一个.NET 4.5.2应用程序,该应用程序使用System.Messaging.MessageQueue将MSMQ消息发送到本地计算机上经过身份验证的事务专用队列。

在开发中,测试中以及在Windows 2008 R2服务器上实时运行时,它都可以很好地工作。我正在迁移到Windows Server 2019,并且不再起作用。也不能在Windows 10桌面上运行。

当我尝试向本地(或远程)发送消息时,它默默地失败并落入“事务性死信”队列中,并出现错误:“签名无效”。

对此的传统答案是:

  • 未安装MSMQ。 A:是本地送货,所以不适用
  • 证书已过期。答:通过MSMQ控制台续订并重新注册了证书。
  • 关闭身份验证。答:可以,但是队列不安全,所以别无选择
  • 启用了弱算法支持。答:仅适用于远程队列的跨操作系统。

在正常运行的2008安装中,测试消息正确识别了发件人,并使用SHA-512将身份验证设置为“是”。

在死信队列中,仍然可以正确识别发件人,但是它表示身份验证为“否”,并且哈希值未知。但是,生成消息的是完全相同的测试代码。

我唯一的奇怪之处是,在所有生产计算机中,由于以下原因,我无法“查看”用户的证书:

  

无法获得用户证书。   错误:存在内部Active Directory域服务错误。

尽管这也发生在2008年的包装盒上,并且效果很好。我还可以通过按“注册...”在计算机上本地查看证书,并且可以在AD用户下的mSMQSignCertificates属性中查看数据。

所以,我完全不知道可能是什么原因造成的。或更重要的是,如何进行进一步的开发。

1 个答案:

答案 0 :(得分:0)

奇怪的确是问题的症状,解决了这个问题就解决了。

我不确定为什么会发生/发生这种情况,但是似乎Active Directory用户对象对于MSMQ的证书来说变得不可读了。

深入的解决方案在此博客上:https://www.aligrant.com/web/blog/2019-09-27_msmq_the_signature_is_invalid

总而言之:清除有问题的AD用户上的mSMQDigests和mSMQSignCertificates条目,然后在使用它的每台服务器上重新注册现有证书。