10

FIPSAlgorithmPolicyWindowsレジストリでが設定されている環境1(具体的には、HKLM / SYSTEM / CurrentControlSet / Control / Lsa)で動作するようにWebアプリケーションを設定しようとしています。このフラグが有効になっている場合、クラスMD5CryptoServiceProviderを呼び出すInvalid Operation Exceptionと、次のスタックトレースでがスローされます。

[InvalidOperationException: This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms.]
   System.Security.Cryptography.RijndaelManaged..ctor() +10480142
   System.Web.Configuration.MachineKeySection.ConfigureEncryptionObject() +439
   System.Web.Configuration.MachineKeySection.EnsureConfig() +152
   System.Web.Configuration.MachineKeySection.GetEncodedData(Byte[] buf, Byte[] modifier, Int32 start, Int32& length) +48
   System.Web.UI.ObjectStateFormatter.Serialize(Object stateGraph) +381
   System.Web.UI.Util.SerializeWithAssert(IStateFormatter formatter, Object stateGraph) +59
   System.Web.UI.HiddenFieldPageStatePersister.Save() +89
   System.Web.UI.Page.SaveAllState() +1117
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3864

この記事で読んだ内容に基づいて、構成ファイルに以下を追加して、アルゴリズムチェックを無効にできるはずです。

<configuration>
    <runtime>
        <enforceFIPSPolicy enabled="false"/>
    </runtime>
</configuration>

これは、テストコンソールアプリケーションでapp.configを変更することで機能します。ただし、.NET2.0Webアプリケーションのweb.configを変更すると機能しないようです。

私にとって興味深いのは、MD5CryptoServiceProviderinコードをインスタンス化するときにすべての例外をキャッチしているにもかかわらず、コードのその部分に到達していないように見えることです。これは私のテストアプリで呼び出されるコードです:

    protected string printSomething()
    {
        string toPrint = String.Empty;
        try
        {
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            toPrint = "Created algorithm.";
        }
        catch (Exception e)
        {
            toPrint = e.ToString();
        }
        return toPrint;
    }

そして、これは私がページにアクセスしたときに私が見るものです:

YSODのスクリーンショット

したがって、これによりいくつかの質問が発生します。

  • アプリが例外をキャッチできるようにする代わりに、IISがYSODをスローするのはなぜですか?
  • Webアプリで使用できるようにするには何をする必要があります<enforceFIPSPolicy enabled="false"/>か?
4

4 に答える 4

8

1)。あなたのコードは例外をスローしていません。ASP.NETは別のことをしています。ASP.NETはViewStateをシリアル化しようとしています。マシンキーで暗号化できます。ASP.NETがこれを内部で行う場合。クラスを使用しますRijndaelManaged(FIPS 140に準拠していないため、爆発します。同様に、ASP.NETがフォーム認証チケットを暗号化/復号化しようとすると、マシンキーも使用されます。

マシンキーの問題にはいくつかのオプションがあります。3DESを使用できます(web.configのMachineKeyを次のように設定することで、常にFIPS準拠の実装を使用します。

<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="3DES" decryption="3DES" />

2)。なぜあなたの旗が無視されているのかわかりません。あるべきではありません。何かわかったら編集します。

MD5CryptoServiceProviderまだ爆撃する可能性があることに注意してください。MD5はFIPS準拠のハッシュではありません。私の知る限りでは; .NETには、SHA-1およびSHA-2ハッシュアルゴリズムのみが含まれています。CryptoServiceProvider最終的にはWindowsCSPに依存する暗号化機能。これもそのフラグを認識します。別の方法は、.NETの実装の代わりにBouncyCastleを使用することです。これは、そのフラグを気にしないためです。

于 2011-07-11T16:01:37.350 に答える
2

もう少しファイルを更新する必要があると思います。ここから

  1. C:\ Program Files \ Common Files \ Microsoft Shared \ DevServer\9.0またはWebDev.WebServer.Exeが含まれているフォルダーに移動します
  2. 「WebDev.WebServer.Exe.config」という名前のテキストファイルを作成します。拡張子が「txt」ではなく「config」であることを確認してください。</li>
  3. 次のテキストをファイルに追加します。

    <configuration> <runtime> <enforceFIPSPolicy enabled="0" /> </runtime> </configuration>

  4. ASP.NET開発サーバーが実行されている場合は、停止します。これを行うには、システムトレイのアイコンを右クリックし、[停止]を選択します。

  5. C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\またはdevenv.exe.configが含まれているフォルダに移動します。
  6. devenv.exe.configのランタイムセクションに次の行を追加します。

    <enforceFIPSPolicy enabled=”0” />

  7. Visual Studioが開いている場合は、閉じてからもう一度開きます。

試すべきいくつかの追加事項

  1. Web.configにないことを再確認してください。デバッグコンパイルが設定されている場合、.NETは内部ブックキーピングにMD5ハッシュを使用します。MD5はFIPSに準拠していないため、このエラーが発生します。

  2. ASP.NET 2.0は、ビューステートデータを処理するときにAESアルゴリズムのRijndaelManaged実装を使用します。RijndaelManagedの実装は、米国国立標準技術研究所(NIST)によって、連邦情報処理標準(FIPS)に準拠していると認定されていません。したがって、AESアルゴリズムは、WindowsプラットフォームのFIPS検証済み暗号化アルゴリズムの一部ではありません。これを解決するには、次の行を使用してweb.configで別のアルゴリズムを指定できます。 <machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="3DES" decryption="3DES"/>

また、MSFTによって、同じエラーが発生することも確認されます。それを修正するには:

メモ帳などのテキストエディタで、アプリケーションレベルのWeb.configファイルを開きます。Web.configファイルで、セクションを見つけます。セクションに次のセクションを追加します。

`<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="3DES" decryption="3DES"/>`

Web.configファイルを保存します。Microsoftインターネットインフォメーションサービス(IIS)サービスを再起動します。これを行うには、コマンドプロンプトで次のコマンドを実行します。iisreset

于 2011-07-11T16:02:43.397 に答える