【发布时间】: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