被TransportWithMessageCredential没有证书的WCF服务是否足够安全?(I

2019-07-29 11:30发布

我已经开发了一个WCF自托管服务,对此我有两个基本的安全需求,因为它会通过互联网进行访问:

  • 传输层应防止篡改和嗅探,尤其是认证证书的检索。 这是SSL做,但是从我所看到的设置SSL需要证书的安装(可能除了通过这个黑客使用普通的证书文件),我不希望有这样做。

  • 认证层应该包括用户名/密码验证器的。

我配置我的服务的使用方法:

      <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName" />
        <transport clientCredentialType="Basic" />
      </security>

即使传输层的HTTP(HTTPS不是),这是否让WCF创建另一个安全层,也就是相当于SSL? 如果没有,是什么在安全强度方面的区别?

此外,有没有什么办法,以确保元数据端点,而无需使用SSL证书(不是必要的,但将不胜感激)?

这是我为自托管服务完整的配置代码:

<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
  <system.serviceModel>
    <services>
      <service name="MyService">
        <host>
          <baseAddresses>
            <add baseAddress = "http://localhost:8000/Services" />
          </baseAddresses>
        </host>
        <endpoint address ="MyService" binding="wsHttpBinding" contract="IMyService">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <bindings>
      <wsHttpBinding>
        <binding name="Binding1" maxReceivedMessageSize="2147483647">
          <security mode="TransportWithMessageCredential">
            <message clientCredentialType="UserName" />
            <transport clientCredentialType="Basic" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="CR.Common.Services.CustomValidator, Common" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

谢谢!

Answer 1:

默认情况下,所有的安全 WCF绑定(像的wsHttpBinding)将进行加密和签名的消息。

SSL强制使用的证书,并在你给的黑客WCF,不SSL链接黑客。 因为没有SSL WCF禁止使用basicHttpBinding的(它发送XML中明确)和UserNamePasswordValidator,因为在这种情况下,任何人都截获的消息可以得到的用户名/密码。

随着WsHttpBinding的你能避免SSL,把安全的消息级别。

我强烈建议你阅读这篇文章 ,尤其是服务凭证和协商章:

为了支持相互认证和消息保护,服务必须提供证书给调用者。 当传输安全被使用(SSL),服务凭证通过传输协议协商。 邮件安全服务的凭证,也可以在使用Windows凭据谈判; 否则,必须指定一个服务证书

随着UserNamePasswordValidator ,你必须在服务器上配置证书允许客户端的签名和加密每个信息(使用证书的公钥)。 如果你使用的是Windows身份验证,它会不会是必要的。

你为什么这么担心证书?



文章来源: Is TransportWithMessageCredential without certificate secure enough for a WCF service?