1

背景情報:

特定のポートの内部サーバーでホストされているいくつかの WCF サービスがあります。DMZ からこのポートのサービスにアクセスできるようにするために、ファイアウォールに穴が「開けられました」。消費する Web アプリは DMZ でホストされます。

内部サーバーには SSL 証明書がありません。

DMZ サーバーには SSL 証明書があります。

問題:

WCF について読んだすべてのことから、WCF サービスをホストするサーバーには SSL 証明書が必要であると理解しています。これは正しいです?

現時点では、いつ内部サーバーに SSL 証明書がインストールされるかわからないため、プラン B を考え出す必要があると言われました。

ASMX/WSE に戻すことを検討し始めましたが、WSE はサポートされなくなり、VS2008 と統合されず、x64 マシンと互換性がないため、これが問題になるようです。

[ロック]私[ハードプレイス]

データには PII が含まれるため、私はセキュリティについてかなり考慮しています...他の人はあまり気にしていませんが.

私が見落としたオプションはありますか?WCF のセキュリティを誤解していませんか? アドバイス?

この投稿はやや似ているようです。


アップデート

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>
4

1 に答える 1

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 サーバー間の Web サービスに HTTP (SSL ではなく) のみを使用することがよくあります。

  • アプリ サーバーで自己署名証明書を使用します。DMZ 内の Web サーバーが証明書 (および/またはその CA) を信頼するように構成されていることを確認してください。

于 2012-04-19T14:45:12.220 に答える