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

MSMQ: The signature is invalid - how to resolve?

我用这个把头撞到墙上,可以做一些灵感。

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

无论是在开发中、测试中还是在 Windows 2008 R2 服务器上,这都非常有效。我正在迁移到 Windows Server 2019,但它不再有效。它也不能在 Windows 10 桌面上运行。

当我尝试向本地(或远程)发送消息时,它无提示地失败并进入事务性死信队列,并出现错误:"The signature is invalid.".

传统的答案是:

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

在死信队列上,发件人仍然被正确识别,但它说身份验证是没有和一个未知的散列。然而,它是生成消息的完全相同的测试代码。

我唯一的另一个奇怪之处是,在所有生产计算机中,我无法 "view" 用户证书,原因是:

User certificate cannot be obtained. Error: There is an internal Active Directory Domain Services error.

虽然这也发生在 2008 盒子上并且工作正常。我也可以在电脑本地按"Register..."查看证书,在AD用户下的mSMQSignCertificates属性里可以看到数据

所以,我完全不知道是什么原因造成的。或者更重要的是,如何进一步推进它。

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

我不确定为什么是 happened/happening,但似乎 Active Directory 用户对象变得无法读取 MSMQ 的证书。

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

总结:清除出现问题的 AD 用户的 mSMQDigests 和 mSMQSignCertificates 条目,并在使用它的每个服务器上重新注册现有证书。