我正在为我的服务使用以下绑定:
<customBinding>
<binding closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00">
<textMessageEncoding messageVersion="Soap12">
<readerQuotas maxDepth="2147483647" maxBytesPerRead="2147483647" maxArrayLength="2147483647"
maxStringContentLength="2147483647" maxNameTableCharCount="2147483647" />
</textMessageEncoding>
<security authenticationMode="CertificateOverTransport" allowInsecureTransport="true" />
<httpTransport maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" />
</binding>
</customBinding>
这会将securityHeaderLayout
节点上的security
默认为Strict
,这要求邮件中的Timestamp
节点首先出现。我正在与不使用WCF的公司的另一部分合作,因此与我一起工作的个人正在尝试使用SoapUI来测试服务。 SoapUI在消息末尾添加Timestamp
节点。这可以手动移动,但显然,一旦您对节点进行签名,它就会被移回 - 因此您可以将节点放在第一位,也可以让它签名,但不能同时签署。
我已尝试将security
节点设置为使用Lax
或LaxTimestampLast
,但似乎没有什么区别:
<security authenticationMode="CertificateOverTransport" allowInsecureTransport="true" securityHeaderLayout="Lax|LaxTimestampLast" />
当我使用LaxTimestampLast
与我自己的(WCF)客户端通话时,它失败了(MessageSecurityException: Signing without primary signature requires timestamp.
)。任何方向都将不胜感激。
答案 0 :(得分:1)
我最近遇到了同样的问题,我通过将customBinding中的messageSecurityVersion设置为WSSecurity10版本来解决它,它以前有过WSSecurity11版本。这是我的自定义绑定,适用于我的WCF客户端和SoapUI:
<customBinding>
<binding name="CustomBinding">
<security authenticationMode="MutualCertificate"
messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"
requireDerivedKeys="false" securityHeaderLayout="Lax" />
<textMessageEncoding messageVersion="Soap11" />
<httpsTransport />
</binding>
</customBinding>