2010-02-19 7 views
5

Windows에서 "암호화, 해시 및 서명에 FIPS 호환 알고리즘 사용"보안 정책 옵션을 사용하도록 설정 한 경우 .NET Framework에서 많은 암호화 클래스를 사용하려고하면 InvalidOperationException이 발생합니다. 기본적으로 ASP.NET은 AES를 사용하여 ViewState BLOB를 암호화하므로 실패합니다. 이 문제를 해결하려면 web.config에 다음과 같은 키를 추가하면됩니다.ASP.NET ScriptManager를 Windows FIPS 보안 정책에 사용할 수 있습니까?

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

그리고 기본 ASP.NET 사용에 대해 설명합니다. 내 문제는 이것입니다 : ASP.NET AJAX의 기초 인 ScriptManagers를 많이 사용하는 크고 복잡한 ASP.NET 웹 응용 프로그램이 있으며이 FIPS 정책 설정을 사용하도록 설정해야하는 정부 고객이 배포해야합니다.

[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"/> 요소를 추가 : 그것에 스크립트 관리자와 모든 ASP.NET 페이지는이 예외가 발생합니다.

ScriptManager를 Windows FIPS 보안 정책과 함께 사용할 수 있도록 ASP.NET을 구성 할 수있는 방법이 있습니까? Microsoft에서

답변

3

업데이트 : 핫 수정 http://code.msdn.microsoft.com/KB981119

대답에서 볼 수 있습니다 당신이 서버를 사용하도록 설정된 FIPS와 스크립트 관리자를 사용할 수 있다는 것입니다. :(

클래스 System.Web.Handlers.ScriptResourceHandler의 정적 메소드 GetAssemblyInfo는 FIPS 준수하지 해시 객체를 생성한다.이 NET 3.5 SP1 및 .NET 3.51

(System.Web 사이에서 변경 하였다. 확장 버전 3.5.30729.196)
XP// 2008 2003 닷넷 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 닷넷 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에서 지원 사례를 열었습니다.

1

Microsoft는이 문제를 해결하기위한 핫픽스 KB981119를 출시했습니다. 나는이 핫픽스가 Microsoft 웹 사이트를 통해 공개적으로 사용 가능하다고 생각하지 않습니다.