Web services 使用WCF使用HTTPS web服务
我正在尝试使用WCF消费客户端的web服务。客户端的web服务是通过HTTPS完成的,我可以通过以下绑定很好地使用它: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
<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>