我收到了错误
签名无效
从W2012服务器向W2008服务器发送消息时。消息在目标服务器上接收,但落入死信队列,并显示此错误消息。
同一工具能够从我的工作站成功将消息发送到同一W2012服务器。
使用管理控制台,在计算机管理,项目消息队列,选项卡发件人,我可以看到消息发件人帐户已正确识别但未经过身份验证。
找出问题与以前一样,但有不同的信息。问题是发件人使用弱证书算法。
为了允许弱证书算法,我将此密钥添加到服务器计算机上的注册表:
HKLM \ SOFTWARE \微软\ MSMQ \参数\安全\ WeakHashAlgorithms
并重新启动MSMQ服务。
然后我还需要在发件人机器上注册发件人帐户的证书。再次使用Microsoft管理控制台,打开消息队列的属性,使用User Certificate
选项卡删除并注册该帐户的证书。
然后可以使用Register
按钮再次注册证书。不确定,但我认为当从客户端收到消息时,MSMQ可以自动完成注册表。
希望这能帮助将来的某个人。
我几乎要添加的其他解决方案是从队列中删除签名验证。为此,请执行以下操作:
Validation
框msmqAuthenticationMode
是用于传输级安全性的WindowsDomain
,因此要在所有绑定中不使用安全性应该是:
<binding name="noSecurity">
<security mode="None" />
</binding>
安全设置必须在两端,客户端和服务中相同。如果服务是配置以接收经过身份验证的消息,则WCF将不允许服务接受未正确签名的消息。
如果已有客户端使用该队列,则可以为非签名消息创建辅助队列。 WCF服务可以侦听多个队列。但是,发送方和接收方必须拥有队列ACL的权限才能使用它。请注意,此操作将允许网络中的任何人向队列发送消息。
有关更多信息,请阅读“Allow anonymous users to send to the queue”页面主题。