-1

このような構造の ASP.NET システムがあり、同じサーバーで .Net 1.1 と .Net 2.0 の両方のアプリをホストしています。

/apps11/app1
/apps11/app2
/apps11/web.config
/apps20/app3
/apps20/app4
/apps20/web.config

上記の 2 つの web.config ファイルには、それぞれのバージョンの .Net に固有のセクションがありますが、フォーム認証とマシン キーに関連する部分は同一でした (異なるバージョンのアプリ間でフォーム認証 Cookie を共有できるようにするため)。セクションを以下に示します (実際のキーは難読化されていますが、正確な長さと設定は保持されています)。

<machineKey
   validationKey="AAAABBBBCCCCDDDDEEEEFFFF0000111122223333"
   decryptionKey="BBBB9999AAAA1111"
   validation="SHA1">
</machineKey>
<authentication mode="Forms">
  <forms name=".ASPXAUTH" protection="All" timeout="15" path="/" loginUrl="/apps20/login.aspx"></forms>
</authentication>

アプリのログイン ページ コンポーネントのアップグレード後、1.1 アプリで共有認証が機能しなくなりました。2.0 アプリにはログインできましたが、1.1 アプリに移動すると、ログイン ページに何度もリダイレクトされました。次のトラブルシューティング手順を実行しました。

  1. MS10-070に問題があり、KB243375 パッチが必要ですか? すでにサーバーに適用されていました。
  2. インストーラーによってマシンキーが壊れましたか? machinekey の値を確認したところ、インストーラーによって validationKey と encryptionKey の値が更新されていました。ただし、設定は同じままで (validation="SHA1")、同じマシンキーが両方の web.config ファイルにありました。
  3. 各 .Net Framework バージョンの machine.config または web.config に他の値がありますか? .Net 2.0 web.config にドメイン設定が見つかりましたが、それはチケット Cookie のドメインにのみ影響し、その内容には影響しないようです。
  4. 「ASP.NET V1.1 および ASP.NET V2.0 アプリケーション間で認証 Cookie を共有する方法」で説明されているように、1.1 と 2.0 の間の暗号化設定に問題がありますか? キー値以外は何も変更されていないのに、なぜ今壊れるのでしょうか?
4

1 に答える 1

2

私自身の質問に答えます。.Net 1.1 から何年も経った今、他の多くの人がこの情報を必要としているとは思えませんが、念のためここに載せておきます...

結局、問題は確かに上記の #4 でした。キーが変更されただけでなく、キーの長さも変更されました。

<machineKey
  validationKey="EEEEEEEE77778888999900001111AAAABBBBCCCCDDDDFFFFAAAABBBBCCCCDDDDEEEEFFFF1111222233334444555566667777888899990000AAAABBBBCCCCDDDD"
  decryptionKey="888899990000111122223333444455556666777788889999" validation="SHA1">
</machineKey>

手がかりはこのSecurity via in ASP.NET 2.0の記事にあり、「復号化属性は、古いバージョンの検証属性の過負荷を軽減するために ASP.NET 2.0 に新たに追加されたものです。この属性の Auto オプションは、キー サイズから推測されるアルゴリズム。トリプル DES 暗号化がデフォルトですが、128 ビットまたは 256 ビットのキーは AES を使用します。」

.Net 2.0 web.config の machineKey タグにencryption="3DES"を追加すると、問題が解決しました。古いキーは 3DES を推測するのに十分なほど短かったため、何年も機能していました。新しいキーは、AES を推測するのに十分な長さでした。

machineKey 要素に関する MSDN ドキュメントに戻って読みました。「ASP.NET は、構成設定に基づいて、使用する復号化アルゴリズムを決定します」と単純に述べています。また、トピックの後半で、各暗号化タイプに使用するキーの長さを示しますが、暗号化タイプが長さから推測されるとは言いません。実際、推奨される長さよりも短いキーを使用する方法を説明しています (なぜそうしたいのかわかりません)。

これに対するより良い解決策はありますか?この点で MSDN のドキュメントがやや欠けていると思うのは私だけでしょうか?

于 2012-09-04T18:00:14.650 に答える