21

https(SSL)で動作するasp.netアプリケーションがあります。これは、私のローカル コンピューターと Amazon AWS (本番環境) でうまく機能しています。

しかし、このアプリケーションを (テスト用に) オフィスでホストすると、奇妙なことが起こります。

  1. ブラウザにhttpsとロック記号が表示されます。

  2. 出力が暗号化され、ポート 443 を示していることも示す Fiddler。

  3. しかし、falseをHttpContext.Current.Request.IsSecureConnection返します

  4. httpをHttpContext.Current.Request.Url.Scheme返します

オフィスでは、Juniper SSG ファイアウォールと TMG 2010 (Forefront Threat Management Gateway 2010) を使用しています。したがって、サーバーは Juniper と TMG 2010 を介してリクエストを受け取ります。よろしくお願いします。

4

3 に答える 3

18

コストを削減するために、SSL 証明書が TMG ゲートウェイにインストールされており、このゲートウェイが要求を実際の Web サーバーに渡すときに、要求を標準の HTTP に書き換えているだけだと思います。そのため、要求が IIS と Web アプリケーションに到達するまでには、標準のプレーン HTTP 要求になります。

于 2012-10-04T11:04:21.963 に答える
15

これは、Amazon の Elastic Beanstalk 環境にデプロイした後につまずきました。ロードバランサーが SSL リクエストをサーバーに直接送信できるようにする方法がわかりませんでした。代わりに、ロードバランサーで常に SSL を終了し、プレーンな http をサーバーに戻していました。

このドキュメントを見つけました: Elastic Load Balancing Concepts - X-Forwarded Headers

基本的に、ロード バランサーは、バックエンド サーバーに転送する前に、各要求に多数の追加のHTTP ヘッダーを挿入します。最も関連性の高いものはX-Forwarded-Proto、クライアントのブラウザーからロード バランサーへの接続に使用されるプロトコルを追跡するものです。これは次のように確認できます。

var loadbalancerReceivedSSLRequest = string.Equals(Request.Headers["X-Forwarded-Proto"], "https");
var serverReceivedSSLRequest = Request.IsSecureConnection;

if (loadbalancerReceivedSSLRequest || serverReceivedSSLRequest)
{
    // SSL in use.
}
else
{
    // SSL not in use.
}
于 2014-12-17T13:05:41.503 に答える
0

確認する別の方法は、ポートを確認することです

if(context.Request.Url.Port == 443)

注: 安全な接続に使用されているポートを確認してください。通常は 443 です。

于 2014-03-30T09:13:38.267 に答える