2010-02-19 3 views
5

Si vous activez l'option de stratégie de sécurité "Utiliser les algorithmes compatibles FIPS pour le cryptage, le hachage et la signature" dans Windows, tenter d'utiliser plusieurs classes cryptographiques dans .NET Framework se traduira par une exception InvalidOperationException. Par défaut, ASP.NET utilise AES pour chiffrer le blob ViewState, de sorte qu'il échoue. Vous pouvez contourner cela en ajoutant une clé comme ceci à web.config:Est-ce que ASP.NET ScriptManager peut être conçu pour fonctionner avec la politique de sécurité Windows FIPS?

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

Et cela vous couvre pour l'utilisation de base ASP.NET. Mon problème est le suivant: j'ai des applications Web ASP.NET volumineuses et complexes qui utilisent largement ScriptManager (la base d'ASP.NET AJAX) et qui doivent être déployées par un client gouvernemental qui doit activer ce paramètre de stratégie FIPS. Toute page ASP.NET avec un ScriptManager sur elle lance cette exception:

[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 

Même en ajoutant l'élément <enforceFIPSPolicy enabled="false"/> à web.config ne résout pas l'exception.

Est-il possible de configurer ASP.NET de sorte que ScriptManager puisse être utilisé avec la stratégie de sécurité Windows FIPS?

Répondre

3

Mise à jour de Microsoft: Le correctif est disponible à http://code.msdn.microsoft.com/KB981119

La réponse est que vous ne pouvez pas utiliser ScriptManager avec FIPS activé serveur. :(

La méthode statique GetAssemblyInfo de classe System.Web.Handlers.ScriptResourceHandler crée un objet de hachage qui est non conforme à la norme FIPS. Cela a été changé entre .Net 3.5 SP1 et .Net 3.51

(System.Web. extensions Version 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 Version 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)); 
} 

De toute évidence, le passage de l'horodatage au hachage a enfreint la norme FIPS. Nous avons ouvert un dossier de support avec Microsoft.

1

Microsoft a publié un correctif pour résoudre ce problème: KB981119. Je ne pense pas que le correctif est publiquement disponible via le site Web de Microsoft.

Questions connexes