MSMQ:"签名无效"在死信队列中

时间:2017-05-23 14:52:34

标签: wcf msmq

我收到错误

  

签名无效

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

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

使用管理控制台,在计算机管理,项目消息队列,标签发件人,我可以看到邮件发件人帐户已被正确识别但未经过身份验证

2 个答案:

答案 0 :(得分:0)

发现问题与以前一样,但是有不同的信息。问题是发件人使用的是弱证书算法。

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

HKLM \ SOFTWARE \微软\ MSMQ \参数\安全\ WeakHashAlgorithms

并重新启动MSMQ服务。

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

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

希望将来帮助某人。

答案 1 :(得分:0)

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

  • 在队列属性窗口中,取消选中Validation
  • 在属性窗口的“安全”选项卡上,为用户“匿名登录”添加发送权限(默认)。
  • WCF的默认netmsmq msmqAuthenticationModeWindowsDomain,以确保传输级安全,因此完全不使用安全性的绑定应为:

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

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

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

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

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