2

我正在尝试使用 WCF 使用客户端的 Web 服务。客户端的 Web 服务是通过 HTTPS 完成的,我可以通过以下绑定很好地使用它:

<bindings>
  <basicHttpBinding>
    <binding name="PurchaseOrderSoap" closeTimeout="00:01:00" openTimeout="00:01:00"
        receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
        bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
        useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
          maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <security mode="Transport" />
    </binding>
  </basicHttpBinding>
</bindings>

但是,我们的安全团队告诉我需要使用MessageTransportWithMessageCredential安全,因为 Fortify 360 抱怨Transport安全性太弱。

当我尝试时,Meesage我收到此错误:

System.InvalidOperationException: BasicHttp binding requires that 
BasicHttpBinding.Security.Message.ClientCredentialType be equivalent to the 
BasicHttpMessageCredentialType.Certificate credential type for secure messages. Select 
Transport or TransportWithMessageCredential security for UserName credentials.

TransportWithMessageCredential收到以下错误:

System.InvalidOperationException: The username is not provided. Specify username in 
ClientCredentials.

我没有用户名/密码(我可以在浏览器中正常连接),所以我的问题是:

我可以使用MessageTransportWithMessageCredentials在使用现有的 HTTPS Web 服务时(无需发布者进行任何更改)吗?如果是这样,我需要对我的配置进行哪些更改?

编辑以澄清问题。

4

3 回答 3

2

如果您无法让第三方供应商向他们的服务添加支持消息安全的端点,那么您将陷入困境。看来他们目前只支持具有传输级别安全性的 basicHttpBinding。

传输安全性并不比消息级别的安全性“更差”。消息级别的安全性意味着肥皂消息的内容是加密的。这使您可以以明文方式存储或转发消息,并且仍然可以确保没有人可以偷看消息。如果您所做的只是通过 Internet 在您的系统和供应商之间进行通信,那么传输和消息级别的安全性同样安全。

于 2011-04-12T13:33:33.120 回答
1

basicHttpBinding 仅支持用户名和证书消息安全。因此,一种选择是,如果您没有在系统上验证用户凭据的机制,则使用证书。

<security mode="TransportWithMessageCredential">
    ...
    <message clientCredentialType="UserName"/>
</security>

另一种选择是使用不同的绑定,例如 wsHttpBinding,它默认启用消息安全性,并且还支持 Windows 和颁发的令牌凭证类型。您实施其中的哪一个在很大程度上取决于您的实施要求和环境。

于 2011-04-12T12:48:49.170 回答
1

您是否没有某种例外政策来记录为什么无法实施 Fortify 的最佳建议?

我认为您能做的最好的事情就是与您的网络服务供应商沟通,并要求增强以支持 Fortify 的传输指南。

另外:我怀疑你说网络浏览器在没有凭据的情况下连接你。这可能意味着您要连接的系统比您的假设要复杂一些。不同的连接或不同的 url 可能由不同的服务器(SSO?)提供服务,或者可能受不同的安全策略(客户端证书等)的约束

于 2011-05-18T06:10:31.247 回答