2017-02-09 23 views
1

WCFエンドポイントバインディングアドレスを変更する必要があります。https(WebHttpBinding)を使用したWCFエンドポイントアドレス

私はNTクラスのサービスを提供しています(重要なのは、ウェブサービスではありません)。

var epa = new EndpointAddress(string.Format("https://localhost:{0}/ServiceAPI/", 8181)); 

ServiceEndpointために使用される結合WebHttpBindingMode=WebHttpSecurityMode.Transport有する(すなわち、HTTPS)である:これは、エンドポイントアドレス、このように作成されたエンドポイントとSystem.ServiceModel.ServiceHostを作成します。

ServiceHostを開くと、コマンドプロンプトに移動し、 "Netstat -a"を実行して、Listenにバインドされたアドレスを0.0.0.0:8181として参照できます。

これまでのところ問題ありません。しかし、大規模な顧客は、WCFの "listen"が127.0.0.1ではなく0.0.0.0にあるため、潜在的な攻撃者が外部のマシンからそのアドレスに接続できるという "セキュリティの問題"を提起しています。彼らが構築したテストは、外部マシンからtelnet 8181を使用することです。接続が発生すると、テストは失敗します。変更要求は、そのポートに接続する唯一の可能性がローカルマシンから来るように、サービスを127.0.0.1:8181で "listen"するように変更することです。

"0.0.0.0"ではなく "127.0.0.1"でWCFを "リッスン"させるために、かなりの修正を行っています。

var epa = new EndpointAddress(string.Format("https://127.0.0.1:{0}/ServiceAPI/", 8181)); 

(実際には、さておき、私はなど、さまざまな結合などを使用する場合のように:私の試みのすべてにおいて、これを行うための唯一の方法は、「完全一致」HostNameComparisonModeを設定し、このように、エンドポイントのアドレスを作成することです、上記EndPointAddress構成は、HostNameComparisonModeを変更せずにアドレス「127.0.0.1:8181」にバインドします.WebHttpBindingを使用すると内部的に「0.0.0.0:8181」に切り替わり、HostNameComparisonMode = Exactを設定することはできません。

ただし、これ(HostNameComparisonMode = Exactに設定)は、既存のサードパーティ製のc WCFはHosthostComparisonModeが "Exact"に設定されていると、WCFは "localhost"と "127.0の違いのために任意の要求に対してhttpエラー506を返すことがあります(サーバーに搭載されたサーバーに接続しようとする試みは既に" https://localhost:8181/ServiceAPI " .0.1 "。

私が現在探しているのは、HostNameComparisonModeがデフォルトの "StrongWildcard"設定に設定されている状態で、 "127.0.0.1:8181"(netstat -aで決定)にバインドするWCFを設定する手段です。または、それを行う方法がある可能性を除いて、外部のマシンからの接続がそのポートに接続できないようにする別の創造的な提案。 (このテストでは、別のマシンから「telnet servername 8181」を使用して接続できません)。

アイデアはありますか?ありがとう!

+0

なぜ同じ要件を満たしていないのでしょうか? ? – nvoigt

+0

これは、関連するスタックオーバーフローの投稿です:http://stackoverflow.com/questions/15428610/wcf-service-endpoint-localhost-confusion – SteveSims

+0

こんにちはnvoigt、httpで同じ問題が発生します(すなわち、Transport.NoneでWebHttpBinding)それはNetTcpBindingでは発生しません。オプションでNetTcpBindingを使用しない理由を尋ねる場合、通常、アプリケーションは他のボックスからの接続を必要とし、https:を使用してセキュリティ保護されます。ただし、ある特定の顧客は、アプリケーションを構成可能にして、ボックスの外から到達できないようにしたいと考えています。 – SteveSims

答えて

0

あなたが正しく理解していれば、リモートマシンからこのアドレスに接続したいので、試してみることができますBasicHttpBinding? "https://localhost:{0}/ServiceAPI /"、8181 "あなたが間違っていたらplを修正してください。

+0

私はBasicHttpBindingの使用方法を調べ、私が見つけたものにコメントを返します。 – SteveSims

+0

BasicHttpBindingは、WebHttpBindingと同様に、バインディングアドレスを "localhost"から "0.0.0.0"に内部的に切り替えます。 – SteveSims

+0

OK、次はplsを試してみましょう:アプリケーションを起動し、ローカルマシンのブラウザ「https:// localhost:8181/ServiceAPI」に入力します。通常、wcfサーバ機能が表示されます。次に、リモートマシンのブラウザで次の行を開きます。「https://ホストマシンのIP:8181/ServiceAPI」 - 同じ結果が得られましたか? –

関連する問題