2010-02-19 22 views
5

Si habilita la opción de política de seguridad "Usar algoritmos compatibles con FIPS para encriptación, hashing y firma" en Windows, intentar utilizar muchas de las clases criptográficas en .NET Framework dará como resultado una InvalidOperationException. De forma predeterminada, ASP.NET usa AES para encriptar el blob ViewState, por lo que falla. Puede solucionar esto añadiendo una clave como este para web.config:¿Se puede hacer que el ASP.NET ScriptManager funcione con la política de seguridad FIPS de Windows?

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

Y que cubre para el uso básico de ASP.NET. Mi problema es este: tengo una aplicación web ASP.NET grande y compleja que hace un uso intensivo de ScriptManagers (la base de ASP.NET AJAX) y necesita ser implementada por un cliente del gobierno que debe habilitar esta configuración de directiva FIPS. Cualquier página ASP.NET con un ScriptManager en él lanza esta excepción:

[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 

Incluso la adición del elemento <enforceFIPSPolicy enabled="false"/> a web.config no resuelve la excepción.

¿Hay alguna forma de configurar ASP.NET de modo que ScriptManager se pueda utilizar con la política de seguridad FIPS de Windows?

Respuesta

3

actualización de Microsoft: El arreglo caliente está disponible en http://code.msdn.microsoft.com/KB981119

La respuesta es que no se puede utilizar con un ScriptManager FIPS servidor habilitado. :(

El método estático GetAssemblyInfo de System.Web.Handlers.ScriptResourceHandler clase crea un objeto hash que no es compatible con FIPS. Esto se cambió entre .Net 3.5 SP1 y .Net 3,51

(System.Web. extensiones versión 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 versión 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)); 
} 

Obviamente, el cambio de la marca de fecha y hora al hash rompió el cumplimiento de FIPS. Hemos abierto un caso de soporte con Microsoft.

1

Microsoft ha publicado una revisión para solucionar este problema: KB981119. No creo que la revisión esté públicamente disponible a través del sitio web de Microsoft.

Cuestiones relacionadas