Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services 使用WCF使用HTTPS web服务_Web Services_Wcf_Configuration_Https_Fortify - Fatal编程技术网

Web services 使用WCF使用HTTPS web服务

Web services 使用WCF使用HTTPS web服务,web-services,wcf,configuration,https,fortify,Web Services,Wcf,Configuration,Https,Fortify,我正在尝试使用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" a

我正在尝试使用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>
通过
TransportWithMessageCredential
我得到以下错误:

System.InvalidOperationException: The username is not provided. Specify username in 
ClientCredentials.
我没有用户名/密码(我可以在浏览器中很好地连接到它),所以我的问题是:

在使用现有的HTTPS web服务时,我是否可以使用
Message
TransportWithMessageCredentials
(发布者不做任何更改)?如果是,我需要对配置进行哪些更改


编辑以澄清问题。

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

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

...

另一个选项是使用不同的绑定,如wsHttpBinding,它默认启用消息安全性,还支持Windows和颁发的令牌凭据类型。您实现哪一个在很大程度上取决于您的实现需求和环境。

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


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

您是否有某种例外策略,可以通过它记录为什么无法实现Fortify的最佳建议

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


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

您是否正在与客户端协商要公开什么?如果他们没有使用消息安全性,那么您在客户端对此无能为力。双方必须就安全策略达成一致。@tomasr:这是一个目前很多人都在使用的web服务,因此没有改变其当前行为的余地。我将相应地更改问题。我没有任何凭据可供使用,而且由于客户端不在我的控制之下(并且由于其他用户而无法更改),我认为我无法使用您提供的代码。我可以在客户端不做任何更改的情况下使用证书吗?@Jackson Pope:无法对客户端进行任何更改将限制您的选择。我认为@Sixto是对的。在大多数情况下,运输安全是可以接受的。如果通道被破坏,它将以任何速度损坏消息,使其变得无用。根据Fortify 360:
传输安全指定由传输层机制(如HTTPS)提供机密性、完整性和身份验证。当使用诸如HTTPS之类的传输时,这种模式的优点是性能高效,并且由于其在互联网上的流行而被广泛理解。缺点是,这种安全性分别应用于通信路径中的每个跃点,使通信容易受到“中间人”攻击。
因此,问题在于lackof身份验证。理论上,可以对任何基于SSL(HTTPS)的连接应用“中间人”攻击。基于消息的加密也容易受到成功包含证书的攻击,就像RSA最近遇到的那样。关键是,即使攻击策略尚未确定,所有加密方法都会有一些漏洞。安全是关于最小化风险。SSL是目前互联网上所有公共电子商务完全可以接受的,因此它提供了合理的安全级别,特别是在您无法更改第三方服务配置的情况下。谢谢!关于中间人攻击的更多信息,这里是一个相关问题的答案:
<security mode="TransportWithMessageCredential">
    ...
    <message clientCredentialType="UserName"/>
</security>