Lax SecurityHeaderLayout似乎不允许时间戳到最后

时间:2014-12-08 21:39:54

标签: wcf soapui

我正在为我的服务使用以下绑定:

<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节点设置为使用LaxLaxTimestampLast,但似乎没有什么区别:

<security authenticationMode="CertificateOverTransport" allowInsecureTransport="true" securityHeaderLayout="Lax|LaxTimestampLast" />

当我使用LaxTimestampLast与我自己的(WCF)客户端通话时,它失败了(MessageSecurityException: Signing without primary signature requires timestamp.)。任何方向都将不胜感激。

1 个答案:

答案 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>