2010-02-19 19 views
5

Windows'taki güvenlik ilkesi seçeneği olan "Şifreleme, karmalama ve imzalama için FIPS uyumlu algoritmalar kullan" seçeneğini etkinleştirirseniz, .NET Framework'teki birçok şifreleme sınıfını kullanmaya çalışmak InvalidOperationException ile sonuçlanır. Varsayılan olarak, ASP.NET ViewState blobunu şifrelemek için AES kullanır, bu nedenle başarısız olur.ASP.NET ScriptManager'ı Windows FIPS güvenlik ilkesiyle çalışacak şekilde üretilebilir mi?

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

Ve bu temel ASP.NET kullanım için teşekkür kapsar: Sen web.config için böyle bir anahtarı ekleyerek bu çalışabilirsiniz. Benim sorunum şudur: ScriptManager'ları (ASP.NET AJAX'ın temelini) yoğun kullanan ve bu FIPS ilke ayarını etkinleştirmesi gereken bir devlet müşterisi tarafından dağıtılması gereken büyük ve karmaşık bir ASP.NET web uygulamalarım var.

[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 

bile istisna gidermezse web.config için <enforceFIPSPolicy enabled="false"/> öğe ekleyerek: Üzerinde bir betiği betik ile herhangi ASP.NET sayfası bu istisna atar.

ScriptManager'ın Windows FIPS güvenlik ilkesiyle birlikte kullanılabilmesi için ASP.NET'i yapılandırmanın herhangi bir yolu var mı? Microsoft'tan

cevap

3

Güncelleme: sıcak düzeltme http://code.msdn.microsoft.com/KB981119

cevap mevcuttur sunucuyu etkin bir FIPS ScriptManager kullanamazsınız olmasıdır. :(

sınıf System.Web.Handlers.ScriptResourceHandler statik yöntem GetAssemblyInfo FIPS uyumlu olmayan bir karma nesnesi oluşturur. Bu .NET 3.5 SP1 ve .NET 3.51

(System.Web arasında değişmiştir. Uzantıları sürüm 3.5.30729.196)
XP// 2008 2003 .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 sürüm 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)); 
} 

Açıktır ki, zaman damgasından hash değerine geçiş, FIPS uyumluluğunu bozmuştur. Microsoft ile bir destek vakası açtık.

1

Microsoft bu sorunu gidermek için bir düzeltme yayımladı: KB981119. Düzeltmenin Microsoft Web sitesi aracılığıyla herkese açık olduğunu sanmıyorum.

İlgili konular