我正在尝试使用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>
但是,我们的安全团队告诉我,我需要使用Message
或TransportWithMessageCredential
安全性,因为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网络服务时,是否可以使用Message
或TransportWithMessageCredentials
(发布商不做任何更改)?如果是这样,我需要对配置进行哪些更改?
编辑澄清问题。
答案 0 :(得分:2)
如果您无法让第三方供应商将端点添加到支持邮件安全性的服务中,那么您就会陷入困境。看来他们目前只支持具有传输级别安全性的basicHttpBinding。
传输安全性并不比消息级安全性“安全”低。消息级安全性意味着soap消息的内容已加密。这允许您以明文方式存储或转发消息,并且仍然可以确保没有人可以查看消息。如果您所做的只是通过互联网在您的系统和供应商之间进行通信,那么传输和消息级安全性同样安全。
答案 1 :(得分:1)
basicHttpBinding仅支持用户名和证书消息安全性。因此,如果您没有用于验证系统上的用户凭据的机制,则可以选择使用证书。
<security mode="TransportWithMessageCredential">
...
<message clientCredentialType="UserName"/>
</security>
另一个选项是使用不同的绑定,例如wsHttpBinding,默认情况下启用了消息安全性,并且还支持Windows和颁发的令牌凭据类型。您实施的其中哪些在很大程度上取决于您的实施要求和环境。
答案 2 :(得分:1)
您是否有某种例外政策可以记录为什么无法实施Fortify的最佳建议?
我认为您可以做的最好的事情是与您的网络服务供应商沟通,并要求增强功能以支持Fortify的传输指南。
另外:我怀疑你说网络浏览器在没有凭证的情况下连接你。这可能意味着您连接的系统比您的假设复杂一点。不同的连接或不同的URL可能由不同的服务器(SSO?)提供服务,或者可能受到不同的安全策略(客户端证书等)的约束