【问题标题】:MSMQ: The signature is invalid - how to resolve?MSMQ:签名无效 - 如何解决?
【发布时间】:2019-09-27 22:43:47
【问题描述】:

我正在用这个撞到墙上,并且可以得到一些灵感。

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

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

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

对此的传统答案是:

  • 未安装 MSMQ。 A:是本地派送,所以不适用
  • 证书已过期。 A:通过 MSMQ 控制台更新和重新注册证书。
  • 关闭身份验证。 A:有效,但队列不安全,因此不是一个选项
  • 启用弱算法支持。 A:仅适用于远程队列的跨操作系统。

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

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

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

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

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

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

【问题讨论】:

  • 您提到的“奇怪”对我来说是最大的提示-如果您无法查看证书,那么我希望 MSMQ 服务帐户也不能。因此,在您对证书的访问感到满意之前,我会将其作为 AD 问题进行故障排除,而不是与 MSMQ 相关。

标签: .net active-directory msmq


【解决方案1】:

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

我不确定它为什么会发生/发生,但似乎 Active Directory 用户对象变得无法被 MSMQ 读取以获取证书。

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

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

【讨论】:

    猜你喜欢
    • 2017-10-23
    • 2021-03-29
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    相关资源
    最近更新 更多