背景资料:
我有一些 WCF 服务托管在特定端口上的内部服务器上。在防火墙上“打了一个洞”,使该端口上的服务可以从 DMZ 访问。消费网络应用程序托管在 DMZ 中。
内部服务器没有 SSL 证书。
DMZ 服务器确实有 SSL 证书。
问题:
从我读过的关于 WCF 的所有内容来看,我的理解是我需要在托管 WCF 服务的服务器上拥有一个 SSL 证书。它是否正确?
目前有人告诉我,我们不知道内部服务器何时会安装 SSL 证书,我需要制定一个 B 计划。
我开始考虑回到 ASMX/WSE,看起来这将是一个问题,因为 WSE 不再受支持,它不与 VS2008 集成,并且与 x64 机器不兼容。
[摇滚]我[硬地]
数据将包含 PII,因此我非常考虑安全性……即使其他人不太关心。
有没有我忽略的选项?我是否误解了 WCF 安全性?建议?
这篇文章似乎有些相似。
更新
感谢 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>