我用这个把我的头撞在墙上,可以带来一些灵感。
我有一个.NET 4.5.2应用程序,该应用程序使用System.Messaging.MessageQueue将MSMQ消息发送到本地计算机上经过身份验证的事务专用队列。
在开发中,测试中以及在Windows 2008 R2服务器上实时运行时,它都可以很好地工作。我正在迁移到Windows Server 2019,并且不再起作用。也不能在Windows 10桌面上运行。
当我尝试向本地(或远程)发送消息时,它默默地失败并落入“事务性死信”队列中,并出现错误:“签名无效”。
对此的传统答案是:
在正常运行的2008安装中,测试消息正确识别了发件人,并使用SHA-512将身份验证设置为“是”。
在死信队列中,仍然可以正确识别发件人,但是它表示身份验证为“否”,并且哈希值未知。但是,生成消息的是完全相同的测试代码。
我唯一的奇怪之处是,在所有生产计算机中,由于以下原因,我无法“查看”用户的证书:
无法获得用户证书。 错误:存在内部Active Directory域服务错误。
尽管这也发生在2008年的包装盒上,并且效果很好。我还可以通过按“注册...”在计算机上本地查看证书,并且可以在AD用户下的mSMQSignCertificates属性中查看数据。
所以,我完全不知道可能是什么原因造成的。或更重要的是,如何进行进一步的开发。
答案 0 :(得分:0)
奇怪的确是问题的症状,解决了这个问题就解决了。
我不确定为什么会发生/发生这种情况,但是似乎Active Directory用户对象对于MSMQ的证书来说变得不可读了。
深入的解决方案在此博客上:https://www.aligrant.com/web/blog/2019-09-27_msmq_the_signature_is_invalid
总而言之:清除有问题的AD用户上的mSMQDigests和mSMQSignCertificates条目,然后在使用它的每台服务器上重新注册现有证书。