【发布时间】:2014-03-07 12:21:37
【问题描述】:
我想构建一个客户端-服务器、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。
非常感谢您对这个问题的帮助。如果需要,我可以提供我尝试过的其他配置。
这是可能的还是我徒劳的尝试?
谢谢!
【问题讨论】:
-
一般不建议通过互联网绑定
net.tcp。 WCF(尤其是在 Internet 上)的很大一部分是安全性。一般来说,最适合 Internet 场景的是 WsHttpBinding with Message security。因为它提供end-to-end安全性并实现WS-* 规范。这是一篇有用的文章:msdn.microsoft.com/en-us/library/ff650874.aspx
标签: wcf ssl forms-authentication net.tcp .net-4.5