none
ASP.NET web.config formsのrequireSSL設定について RRS feed

  • 質問

  • IIS7、ロードバランサ環境でASP.NET(C#)を動作しています。

    サーバ(非SSL)⇔ (非SSL) SSLアクセラレータ兼ロードバランサー(SSL) ⇔ (SSL)外部端末(証明書有)

    web.configの<formsにsecure属性が付加されていないという指摘を受け

    requireSSL="true"を付加したのですが以下のエラーが発生します。

    -------

    アプリケーションは、セキュリティで保護された cookie を発行するように構成されています。これらの cookies では、サーバーが SSL (https プロトコル) 経由で要求を発行することが必要ですが、現在の要求は SSL 経由ではありません。

    -------

    他のcookieにはweb.configにsecure設定を追加することによりsecure属性が付加されます。

    付加できる方法もしくは付加できない理由で情報ありましたらお願いいたします。

    2013年12月10日 2:02

回答

  • 検証できる環境は持ってないので推測ですが・・・

    web.config の authentication 要素の forms 子要素の loginUrl を https: から始まる絶対 URL にしたらどうなりますか?

    以下のページは Commerce Server の設定のようですが、2 は関係あるかも。

    Running the Starter Site With an SSL Front End
    http://blogs.msdn.com/b/commerce/archive/2007/07/17/running-the-starter-site-with-an-ssl-front-end.aspx

    "2. In the web.config's "system.web\authentication\forms" section change the "loginUrl" property to contain the absolute URL path to the login page, for example: "https://example.com/StarterSite/User/Login.aspx". "

    "2. Normally the site checks to make sure the login page is secure before showing it, but it's not possible to know that when behind an accelerator.  This forces ASP.NET Forms Authentication to use the HTTPS url for the login page. "

    ハズレでしたらすみません。

    • 回答としてマーク xxxxxyz 2013年12月20日 15:01
    2013年12月12日 7:40

すべての返信

  • SSL (https プロトコル) 経由で要求/応答のやり取りをしてない状態でログイン操作をしたのでしょうか? そうするとサーバーエラーになって認証クッキーは発行されず、そのメッセージが返ってきます。

    一般のクッキーなら Cookie.Secure = true; と設定すると、Set-Cookie: name=...; path=/; secure というクッキーが応答ヘッダーに含まれてブラウザに返されますが、認証クッキーは様子が違うようです。(そのあたりが仕様かどうかは調べきれてません)

    認証クッキーをやり取りする全てのページで SSL (https プロトコル) 経由にしたらどうなりますか?

    2013年12月10日 7:01
  • SSL (https プロトコル) 経由で要求/応答のやり取りをしてない状態でログイン操作をしたのでしょうか? そうするとサーバーエラーになって認証クッキーは発行されず、そのメッセージが返ってきます。

    一般のクッキーなら Cookie.Secure = true; と設定すると、Set-Cookie: name=...; path=/; secure というクッキーが応答ヘッダーに含まれてブラウザに返されますが、認証クッキーは様子が違うようです。(そのあたりが仕様かどうかは調べきれてません)

    認証クッキーをやり取りする全てのページで SSL (https プロトコル) 経由にしたらどうなりますか?

    上記記載の通りサーバからプラウザまでにアクセラレータを経由する環境で

    サーバ⇒アクセラレータの間は非SSL、アクセラレータ⇒ブラウザの間はSSL通信となっています。

    この条件で一般のcookieに対しCookie.Secure = trueまたはweb.configのsysytem.web内に <httpCookies requireSSL ="true" />を定義するとsecure属性が付加することが確認できるのですが、

    formsで定義されているものに対しては付加されません。

    そこでformsにrequireSSL="true"を定義すると上記のエラーとなってしまいます。

    formsの認証cookieと一般のcookieは仕様が異なるのですね。

    2013年12月12日 4:06
  • 検証できる環境は持ってないので推測ですが・・・

    web.config の authentication 要素の forms 子要素の loginUrl を https: から始まる絶対 URL にしたらどうなりますか?

    以下のページは Commerce Server の設定のようですが、2 は関係あるかも。

    Running the Starter Site With an SSL Front End
    http://blogs.msdn.com/b/commerce/archive/2007/07/17/running-the-starter-site-with-an-ssl-front-end.aspx

    "2. In the web.config's "system.web\authentication\forms" section change the "loginUrl" property to contain the absolute URL path to the login page, for example: "https://example.com/StarterSite/User/Login.aspx". "

    "2. Normally the site checks to make sure the login page is secure before showing it, but it's not possible to know that when behind an accelerator.  This forces ASP.NET Forms Authentication to use the HTTPS url for the login page. "

    ハズレでしたらすみません。

    • 回答としてマーク xxxxxyz 2013年12月20日 15:01
    2013年12月12日 7:40