2

このコードを使用して、特定のURLにリクエストを送信します。

private static string GetWebRequestContent(string url)
{
  string sid = String.Empty;

  HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
  req.KeepAlive = false;

  using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
  {
    using (StreamReader sr = new StreamReader(res.GetResponseStream()))
    {
      sid = sr.ReadToEnd().Trim();
    }
  }

  return sid;
}

これを使用して、3台のサーバーが背後にあるWorkLoadBalancerの粘着性をテストしています。それらはすべて、サーバーのサーバーIDが書き込まれるsid.htmと呼ばれる静的HTMファイルを持っています。

HTTPを使用するURLの場合、これは正常に機能します。しかし、HTTPSでは機能しません。この例外が発生します:

要求は中止されました:SSL/TLSのセキュリティで保護されたチャネルを作成できませんでした。

現在、WLBの背後には2台のサーバーしかなく、ファイアウォールの背後にパブリックIPを備えたサーバーが1台あります。スタンドアロンサーバーにアクセスした場合、HTTPSリクエストは正常に機能しますが、WLBにアクセスすると、上記のエラーが発生します。

1つ:単一サーバーとWLBのヒットを切り替えるために、hostsファイルを使用します。私のドメインのDNSレコードは、現時点では単一のサーバーを指しています。そこで、ホストファイルにレコードを入れてWLBをヒットしました。これは問題を引き起こしてはいけません...

私の質問:HttpWebRequestはどのSSLクレデンシャル/証明書を使用しますか?40ビットDESまたは56ビットDESを使用する場合、それらはWLBで無効になっているため、これが理由です。ただし、IE3およびNetscape 1および2以降、これらの証明書はブラウザで使用されていません。

4

2 に答える 2

7

それは私のブラウザで完全に動作します。

質問を投稿してから1分後に解決策が見つかりました:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

これは、HttpWebRequestがTLS 1.0を使用していたことを意味します-わかりませんが、これは40ビットDESまたは56ビットDESであり、WLBでは無効になっていると思います。

于 2008-10-23T08:31:05.903 に答える
0

ロードバランサで考慮したいことがあるかもしれません。私たちが使用するものは、HTTPS の安全なトラフィックを安全でない HTTP 接続で背後のサーバーに転送します。ロード バランサとブラウザ間の接続は依然として安全ですが、バランサと Web サーバー間の安全なプロトコルのオーバーヘッドは必要ありません。

Web サーバーで安全な接続を検出したかったのですが、最初は HTTPS 接続を確認できませんでした。そのとき、バランサーの背後のトラフィックがすべて安全ではないことに気付きました。私たちが知ったら理にかなっています。

ここで行うことは、バランサー (ポート 443) に入ってくるすべての安全なトラフィックをポート 81 (代替 HTTP) に転送し、次にすべての通常の HTTP トラフィック (ポート 80 & 81) をポート 80 に転送することです。その後、Web でポートを確認できます。 80 は安全ではなく、81 はブラウザーとバランサーの間の安全なトラフィックであることがわかっていますが、Web サーバーではすべて HTTP であるという事実があります。

于 2008-10-23T08:40:57.473 に答える