MSMQ:"The signature is invalid" 在死信队列中

MSMQ: "The signature is invalid" in dead letter queue

我遇到错误

The signature is invalid

从 W2012 服务器向 W2008 服务器发送消息时。消息在目标服务器上收到,但落入死信队列,并显示此错误消息。

同样的工具能够从我的工作站成功地将消息发送到同一个 W2012 服务器。

使用管理控制台,在计算机管理中,消息队列项,选项卡发件人,我可以看到消息发件人帐户已正确识别但未通过身份验证

发现问题与我之前遇到的问题相同,但消息不同。问题是发件人使用的是弱证书算法。

为了允许弱证书算法,我将此密钥添加到服务器计算机上的注册表中:

HKLM\SOFTWARE\Microsoft\MSMQ\Parameters\Security\WeakHashAlgorithms

并重新启动 MSMQ 服务。

然后我还需要在发件人机器上为发件人帐户注册证书。再次使用 Microsoft 管理控制台,打开消息队列属性,使用 User Certificate 选项卡删除并注册该帐户的证书。

然后可以使用 Register 按钮再次注册证书。不确定,但我认为当收到来自客户端的消息时,MSMQ 可以自动完成注册。

希望这对以后的人有所帮助。

我几乎添加到申请的其他解决方案是从队列中删除签名验证。 为此,请执行以下操作:

  • 在队列属性 window,取消选中 Validation
  • 在 属性 window 的安全选项卡中,为用户 ANONYMOUS LOGON 添加发送权限(默认)。
  • WCF 默认 netmsmq msmqAuthenticationModeWindowsDomain 用于传输级别安全性,因此根本不使用安全性绑定应该是:

    <binding name="noSecurity">
        <security mode="None" />
    </binding>
    

    客户端和服务两端的安全设置必须相同。如果服务配置为接收经过身份验证的消息,WCF 将不允许服务接受未正确签名的消息。

    如果已经有客户端在使用该队列,则可以为未签名的消息创建辅助队列。 WCF 服务可以侦听多个队列。不过,发送方和接收方必须拥有队列 ACL 的权限才能使用它。

请注意,此操作将允许网络中的任何人向队列发送消息。

有关详细信息,请阅读“Allow anonymous users to send to the queue”页面主题。