5

Windows で [暗号化、ハッシュ、および署名に FIPS 準拠のアルゴリズムを使用する] セキュリティ ポリシー オプションを有効にした場合、.NET Framework で多くの暗号化クラスを使用しようとすると、InvalidOperationException が発生します。デフォルトでは、ASP.NET は AES を使用して ViewState blob を暗号化するため、失敗します。これを回避するには、次のようなキーを web.config に追加します。

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

これで、基本的な ASP.NET の使用がカバーされます。私の問題は次のとおりです。ScriptManagers (ASP.NET AJAX の基盤) を多用する大規模で複雑な ASP.NET Web アプリケーションがあり、この FIPS ポリシー設定を有効にする必要がある政府の顧客によって展開される必要があります。ScriptManager を含む ASP.NET ページは、次の例外をスローします。

[InvalidOperationException: This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms.]
   System.Security.Cryptography.SHA1Managed..ctor() +3607454
   System.Security.Policy.Hash.get_SHA1() +45
   System.Web.Handlers.ScriptResourceHandler.GetAssemblyInfoInternal(Assembly assembly) +85
   System.Web.Handlers.ScriptResourceHandler.GetAssemblyInfo(Assembly assembly) +99
   System.Web.Handlers.RuntimeScriptResourceHandler.GetScriptResourceUrlImpl(List`1 assemblyResourceLists, Boolean zip, Boolean notifyScriptLoaded) +525
   System.Web.Handlers.RuntimeScriptResourceHandler.System.Web.Handlers.IScriptResourceHandler.GetScriptResourceUrl(List`1 assemblyResourceLists, Boolean zip, Boolean notifyScriptLoaded) +910
   System.Web.Handlers.RuntimeScriptResourceHandler.System.Web.Handlers.IScriptResourceHandler.GetScriptResourceUrl(Assembly assembly, String resourceName, CultureInfo culture, Boolean zip, Boolean notifyScriptLoaded) +193
   System.Web.UI.ScriptReference.GetUrlFromName(ScriptManager scriptManager, IControl scriptManagerControl, Boolean zip) +306
   System.Web.UI.ScriptManager.RegisterUniqueScripts(List`1 uniqueScripts) +169
   System.Web.UI.ScriptManager.RegisterScripts() +407
   System.Web.UI.ScriptManager.OnPagePreRenderComplete(Object sender, EventArgs e) +200
   System.Web.UI.Page.OnPreRenderComplete(EventArgs e) +11041982
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3672

要素を web.config に追加しても<enforceFIPSPolicy enabled="false"/>、例外は解決されません。

Windows FIPS セキュリティ ポリシーで ScriptManager を使用できるように ASP.NET を構成する方法はありますか?

4

2 に答える 2

3

Microsoft からの更新: ホット フィックスはhttp://code.msdn.microsoft.com/KB981119で入手できます。

答えは、FIPS 対応サーバーでは ScriptManager を使用できないということです。:(

クラス System.Web.Handlers.ScriptResourceHandler の静的メソッド GetAssemblyInfo は、FIPS に準拠していないハッシュ オブジェクトを作成します。これは、.Net 3.5 SP1 と .Net 3.51 の間で変更されました。

(System.Web.Extensions バージョン 3.5.30729.196)
XP/2003/2008 .Net 3.5 SP1

private static Pair<AssemblyName, DateTime> GetAssemblyInfoInternal(Assembly assembly)
{
    return new Pair<AssemblyName, DateTime>(new AssemblyName(assembly.FullName), GetLastWriteTime(assembly));
}

(System.Web.Extensions バージョン 3.5.30729.4926)
Win7/2008R2 .Net 3.51

private static Pair<AssemblyName, string> GetAssemblyInfoInternal(Assembly assembly)
{
    AssemblyName first = new AssemblyName(assembly.FullName);
    return new Pair<AssemblyName, string>(first, Convert.ToBase64String(new Hash(assembly).SHA1));
}

タイムスタンプからハッシュへの変更は明らかに FIPS 準拠を破っています。Microsoft でサポート ケースをオープンしました。

于 2010-02-19T15:48:55.610 に答える
1

Microsoft は、この問題に対処するホットフィックス KB981119 をリリースしました。この修正プログラムは、マイクロソフトの Web サイトから公開されているとは思いません。

于 2010-03-15T14:31:46.383 に答える