WCF NET.TCP SSL,证书和用户名 密码身份验证



我想构建一个应满足以下要求的客户服务器,wpf-wcf应用程序:

  • 快速
  • 确保客户与服务器之间的通信
  • 如果用户想使用客户端应用程序,他应该在计算机上安装某个证书,还提供有效的用户名/密码对
  • 一切都应该在互联网上发生

所以我两天前就开始研究它,在经历了几乎每个示例/教程之后,我都可以找到接近我的方案后,我设法使用IIS托管的Net.TCP绑定来构建WCF服务(8我认为)并通过MEX端点和一个小客户端控制台应用程序公开其元数据,该应用程序可以连接到服务并呼叫其唯一的Helloworld方法。

一切都很好,直到我开始尝试添加基于证书的安全性。我尝试了无数的配置组合和技术,但仍然无法正常工作。

首先,我收到了一些特定的错误消息,告诉我有关服务器或客户端证书无效,可信或对任何方式都不利的各种内容。然后我遵循这些文章,因为在开发时需要自签名证书。

  • http://msdn.microsoft.com/en-us/library/ff647171.aspx
  • http://msdn.microsoft.com/en-us/library/ms733813(v = vs.110).aspx
  • http://msdn.microsoft.com/en-us/library/ff648498.aspx

然后,我开始收到越来越模糊的错误消息,直到我放弃。很可能我误解了WCF的工作原理,因为我没有那么多的经验。

有效的配置是:

  • 服务配置

    <configuration>
      <system.web>
        <httpRuntime targetFramework="4.5.1"/>
      </system.web>
      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior name="TcpServiceBehaviour">
              <serviceMetadata />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <services>
          <service behaviorConfiguration="TcpServiceBehaviour" name="WcfTcpServer.TcpService">
            <endpoint address="net.tcp://serverName/wcftcpserver/TcpService.svc" binding="netTcpBinding" name="TcpServiceEndpoint" contract="WcfTcpServer.ITcpService" />
            <endpoint address="SME" binding="mexTcpBinding" bindingConfiguration="" name="ServiceMetadataEndpoint" contract="IMetadataExchange" />
          </service>
        </services>
      </system.serviceModel>
    </configuration>
    
  • 客户端配置

    <configuration>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
      </startup>
      <system.serviceModel>
        <client>
          <endpoint address="net.tcp://serverName/wcftcpserver/TcpService.svc" binding="netTcpBinding" contract="WcfTcpServer.ITcpService" name="TcpServiceEndpoint">
            <identity>
              <servicePrincipalName value="host/serverName.smth.smthElse.ro" />
            </identity>
          </endpoint>
        </client>
      </system.serviceModel>
    </configuration>
    

,您可以看到,无证书的配置。我在此配置中使用我的自签名证书采取的任何步骤都会打破应用程序。

我使用.netframework 4.5.1用于所有内容。

我非常感谢您解决这个问题。如果需要,我可以提供尝试的其他配置。

这是可能的还是我徒劳地尝试?

谢谢!

简而言之,是的,您可以使用所谓的支持令牌支持多个客户凭证。

从链接的文章中:

该示例添加了X.509二进制安全令牌。 用户名安全令牌。令牌通过WS安全消息传递 从客户到服务的标题,消息的一部分是 与X.509安全令牌相关的私钥签名 为了证明拥有X.509证书给接收器。这 对于有多个要求 与一条消息相关的索赔,以身份验证或授权 发件人。

关于通过Internet使用NetTcpBinding的主题:

NetTcpBinding通常建议用于Intranet方案。我所读过的许多内容都建议使用WsHttpBindingBasicHttpBinding进行Internet方案,具体取决于您的要求。如果安全性是您的首要问题 - 建议的选择是具有Message级安全性的WsHttpBinding

为互联网方案选择绑定的指南:互联网绑定方案。

最新更新