背景信息:
我有一些托管在特定端口上的内部服务器上的WCF服务。在防火墙中“打孔”了一个洞,以便从DMZ访问此端口上的服务。消费网络应用程序托管在DMZ中。
内部服务器没有SSL证书。
DMZ服务器具有SSL证书。
问题:
从我读过的关于WCF的所有内容中,我的理解是我需要在托管WCF服务的服务器上使用SSL证书。这是对的吗?
此时我被告知,我们不知道内部服务器何时安装了SSL证书,我需要提出计划B.
我开始考虑回到ASMX / WSE,看起来这将是一个问题,因为不再支持WSE,它不与VS2008集成,并且它与x64机器不兼容。
[岩]我[hardplace]
数据将包含PII,因此我非常关注安全性......即使其他人不太关心。
有没有我忽略的选择?我误解了WCF的安全性吗? 建议?
这post似乎有些相似。
感谢mikey的回答和评论,我对我的配置进行了一些更改。它需要一些试验和错误以及额外的谷歌搜索...但它似乎现在正在工作(我还没有进行任何广泛的测试)。但是,我不知道这是否足够安全...... 将我的解决方案添加到原始帖子中,以便将mikey的答案标记为答案。
我的更改
服务:
<behaviors>
<serviceBehaviors>
<behavior name="serviceBehavior">
<dataContractSerializer maxItemsInObjectGraph="6553600" />
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpsGetEnabled="false" />
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="customBinding">
<reliableSession enabled="true" />
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="serviceBehavior" name="MyApp.WcfServices.MyService">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="customBinding" contract="MyApp.WcfServices.IMyService">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
网络应用程序:
<bindings>
<wsHttpBinding>
<binding name="customBinding" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="1048576" maxReceivedMessageSize="1048576"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="true" />
<security mode="None">
<transport clientCredentialType="None" />
<message clientCredentialType="None" negotiateServiceCredential="false" establishSecurityContext="false" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://[Ip Address]:8943/MyAppWcfServices/Hosts/MyService.svc"
binding="wsHttpBinding" bindingConfiguration="customBinding"
contract="MyService.IMyService" name="customBinding" behaviorConfiguration="clientBehavior">
</endpoint>
</client>
答案 0 :(得分:1)
以下是一些选项:
您不为WCF 需要 SSL。您可以将安全性设置为“无”http://msdn.microsoft.com/en-us/library/ms731172.aspx或http://social.msdn.microsoft.com/forums/en-US/wcf/thread/271b1816-173c-4c76-a4c4-fd9fda4b5e91/ - 然后您将不需要SSL证书。由于流量仅在您的Web服务器和您的app / wcf服务器之间流动,因此唯一能够嗅探它的人应该是内部人员...在某些时候,您必须相信您的网络正在按预期工作。我经常在同一网络上的应用程序和Web服务器之间仅使用HTTP(而非SSL)进行Web服务,尤其是在速度问题时。
在应用服务器上使用自签名证书。确保DMZ中的Web服务器配置为信任证书(和/或其CA),您应该好好去。