在内部域上托管的SSL,WCF服务,消费应用程序驻留在DMZ中

时间:2012-04-19 14:11:13

标签: wcf ssl-certificate

背景信息:

我有一些托管在特定端口上的内部服务器上的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>

1 个答案:

答案 0 :(得分:1)

以下是一些选项: