SSL ターミネーションと ASP.NET

サポートが終了した KB の内容についての免責事項

この記事は、マイクロソフトがサポートを提供しなくなった製品について記述しています。 したがって、この記事は「現状のまま」で提供され、更新されることはありません。

ASP.NET サポート音声列

SSL ターミネーションと ASP.NET

お客様のニーズには、この列をカスタマイズするには、サポート技術情報とサポート音声列にして表示する問題に関心のあるトピックに関するアイデアが将来的にアドレスを送信することを招待します。アイデアとそれの要求フォームを使用してフィードバックを送信できます。この列の下部にあるフォームへのリンクもあります。
ASP.NET サポート音声列へようこそ!Jerry Orman は、自分の名前です。5 年以上にわたって Microsoft とされているし、Microsoft および Microsoft SharePoint 製品とテクノロジなどの Web 関連のテクノロジに重点を置いた時間のほとんどを費やしてきました。サポート エンジニアは、Microsoft ASP.NET を使用する最後の年を費やしています。今月は、SSL ターミネーションと ASP.NET について説明するつもりです。具体的には、サーバーの構成に起因する問題に集中します。アプリケーションで、この構成のいくつかの副作用を見てするつもりです。

SSL ターミネーション構成で、コードを実行している Web サーバーが送信し、HTTP 経由でトラフィックを受信するは、Web サーバーとクライアント間で暗号化し、データを復号化するデバイス。この構成では、クライアントが送信して、HTTPS トラフィックを受信します。SSL ターミネーション構成は次のようなのです。
クライアント <-HTTPS-> SSL デバイス <-HTTP-> Web サーバー
この構成では、Microsoft ASP.NET 2.0 で発生する 2 つ以上の問題と、問題を解決する方法をいくつかの見てみましょう。

問題 1

ASP.NET 2.0 のメニューコントロールでメニュー項目の上にマウス ポインターを移動するときは、次のエラー メッセージを表示します。
このページには、項目と保護されていない項目が含まれています。保護されていない項目を表示しますか。
アプリケーションを想定し、安全のために、SSL プロトコルを使用している HTTP アドレスに絶対パスをレンダリングするすべてのコントロールを追加していません。このメッセージに何ですか。

問題は、
メニューコントロールでは、 iFrameオブジェクトを使用すると、フライアウト メニューを作成するいくつかの JavaScript を生成します。フレームの開始 URL を提供する必要があります。スクリプトを使用して SSL 以外のシナリオで、サーバーに、不要なラウンド トリップを加えることを避けるためには、
に関する: 空白の URL です。ただし、ブラウザーとみなしますセキュリティ保護されていないアドレスでは、上記のエラーが発生するようにします。この問題は、Microsoft Windows SharePoint Services についての詳細については、マイクロソフト サポート技術情報の記事を表示するのには次の資料番号をクリックして:

837850 Windows SharePoint Services または microsoft SharePoint Team Services では、ドキュメント ライブラリのエクスプ ローラー ビューをクリックしたときに「このページには、項目と保護されていない項目が含まれています」メッセージが表示されます。

Web サーバーが SSL のデバイスではなく HTTPS トラフィックを受け取ると、 Menuコントロールを生成する JavaScript はサーバー上のページの HTTPS アドレスにiFrameオブジェクトのソースを設定するコードの行を追加ために明示的に、SSL 以外のシナリオを説明します。これは、別の要求を開始する、エラー メッセージを防ぐことが。このような環境に導入する場合は、メニューコントロールのあるページにこのコードを追加することによって、エラー メッセージを防ぐために JavaScript の追加を強制できます。
 <script runat="server">   protected override void Render(HtmlTextWriter writer) 
{
Page.ClientScript.RegisterStartupScript(typeof(Page), "MenuHttpsWorkaround",
Menu1.ClientID + "_Data.iframeUrl='https://myserver/someblankpage.htm';", true);
base.Render(writer);
}
</script>

理想的には、 MasterPageクラスまたはユーザー コントロールクラスでは、メニューを必要とし、1 回だけこのコードを追加します。

問題 2

あります、 requireSSL属性がある場合、
サーバーが応答を何度もリダイレクトの< フォーム >要素をtrueに設定します
ありますログイン ページです。これが原因で発生する方法に変更します
FormsAuthenticationModuleメソッドは、 requireSSL属性を処理します。RequireSSL属性をtrueに設定すると、 FormsAuthenticationModuleメソッドは、セキュリティで保護された属性が設定されている cookie を作成します。(この動作は、.NET Framework 1.1 の場合と同じ) です。セキュリティで保護された属性を使用する場合、クライアントが SSL を使用してクライアントはのみ cookie サーバーに渡します。この部分が、クライアントが SSL を使用して実際にします。匿名ユーザーがアクセスできない SecurePage.aspx ページがあると仮定します。SSL プロトコルと、 requireSSL属性では、最終的に SecurePage.aspx に最初の要求では、次のトラフィック。
-> クライアントは、SecurePage.aspx の GET 要求を行います。

<-サーバーは、ログイン ページに、HTTP 302 (リダイレクト) を返します。

-> クライアントは、Login.aspx の GET 要求を行います。

<-サーバーは [ok] を 200 を返します。 クライアントにログイン ページを表示します。

-> クライアントは、Login.aspx に POST 要求を行います。

<-サーバーは、SecurePage.aspx に 302 (リダイレクト) を返します。 ヘッダーは、セキュリティで保護された属性を使用して、クライアントに送信される Cookie を設定します。

-> クライアントは、SecurePage.aspx に GET 要求を行います。 Cookie は、クライアントが SSL を使用するために渡されます。

<-サーバーは、ログイン ページに戻る 302 (リダイレクト) を返します。

FormsAuthenticationModuleクラスに変更されたためには、最後の要求のリダイレクトを取得します。追加の確認は、ユーザーに SSL 以外の要求をセキュリティで保護された cookie が渡されるかどうかを判断するには ASP.NET 2.0 で追加されました。ASP.NET 2.0 は、 FormsAuthentication.RequireSSLプロパティがfalseに設定する場合、またはRequest.IsSecure属性がtrueに設定されている場合に、所属クラスを返します。
  • RequireSSL属性が構成ファイルでfalseに設定する場合、 FormsAuthentication.RequireSSLプロパティはfalseに設定します。
  • Web サーバーが SSL トラフィックを受信した場合、 Request.IsSecure属性がtrueに設定します。
なので、このシナリオでは、Web サーバーが SSL トラフィックを受信していないと、 requireSSL属性がtrueに設定されて、両方のチェックはfalseを返します。その結果、所属クラスが返されないと、cookie は、 Request.Cookiesコレクションから削除されます。

ユーザーが実行する要求は、サーバーではまだユーザーの資格情報が検証されていませんのでこの時点で匿名。要求は、ASP.NET パイプラインを通過、 UrlAuthorizationModuleクラスは、ユーザーがページへのアクセスを持っているかどうかをチェックします。匿名ユーザーには、SecurePage.aspx のページへのアクセスがないため、
UrlAuthorizationModuleクラスは、ログイン ページにリダイレクトの結果 (「アクセスが拒否されました」)、401 エラー メッセージを返します。

この現象を回避するためにまず、 requireSSL属性を構成ファイルの< フォーム >タグから削除するのにはあります。プログラムを使用してありますcookie のセキュリティで保護された属性を設定する必要が。次のコードは、両方の
ありますcookie とセッションcookie です。
void Application_EndRequest(object sender, EventArgs e){
if (Response.Cookies.Count > 0)
{
foreach (string s in Response.Cookies.AllKeys)
{
if (s == FormsAuthentication.FormsCookieName || s.ToLower() == "asp.net_sessionid")
{
Response.Cookies[s].Secure = true;
}
}
}
}

関連情報

メニューコントロールの詳細については、次の Microsoft Developer Network (MSDN) Web サイトを参照してください。FormsAuthentication.RequireSSLプロパティの詳細については、 requireSSL属性は、次の MSDN Web サイトを参照してください。HttpRequest.IsSecureConnectionプロパティの詳細については、 IsSecure属性は、次の MSDN Web サイトを参照してください。FormsAuthenticationModuleクラスの詳細については、次の MSDN Web サイトを参照してください。UrlAuthorizationModuleクラスの詳細については、次の MSDN Web サイトを参照してください。

役立つ情報 SSL ターミネーション、Microsoft ASP.NET を使用しているときを願っています。 サポート音声列であることを忘れないでください!常に、お気軽に目的のトピックに関するアイデアを送信するアドレス指定、将来の列、または、サポート技術情報を使用して、
それの質問のフォームです。
プロパティ

文書番号:910444 - 最終更新日: 2017/02/02 - リビジョン: 1

フィードバック