web-services - 使用 WCF 使用 HTTPS Web 服务

标签 web-services wcf configuration https fortify

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

<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.

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

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

编辑以澄清问题。

最佳答案

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

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

关于web-services - 使用 WCF 使用 HTTPS Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5634441/

相关文章:

Git 禁用从本地存储库推送

CloudConfigurationManager 的 Python Azure SDK 等效项

c# - Web 服务创建实例问题 -> 找不到引用契约(Contract) 'MyWebService.ClassName' 的默认端点元素

c# - Windows Phone 7 上的双向通信

javascript - 我应该选择哪个 Google map 选项?

c# - WCF netTcpBinding 异步调用

c# - 如何在 WCF 中保存用户对象

Python - 是否可以让logging.handlers.httpHandler将内容 header 设置为JSON而不诉诸自定义代码?

java - 更改使用 JAXWS 生成的默认 XML 命名空间前缀

android - 从 Android 发送到 SQL 数据库后无法渲染图像