2013-10-16 29 views
6

Mam prostą aplikację .net używającą środowiska wykonawczego .NET 2.0 w IIS 7.5, w której zmieniłem klucz komputera w pliku web.config, aby użyć następującego:Nie można sprawdzić poprawności błędu danych z kluczem maszyny ustawionym na SHA1

<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="SHA1"/> 

Działa to dobrze lokalnie, ale kiedy publikuję na serwerze otrzymuję "HttpException (0x80004005): Nie można zweryfikować danych" podczas przeglądania witryny. Upewniłem się ustawić debugowanie kompilacji = "false". Ustawienie metody sprawdzania poprawności na 3DES eliminuje ten problem, ale mamy wymóg pracy z SHA1. Czy jest tu jakaś opcja konfiguracji, której tu brakuje? zobacz ślad stosu poniżej.

 
[HttpException (0x80004005): Unable to validate data.] 
    System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, IVType ivType, Boolean useValidationSymAlgo, Boolean signData) +1008 
    System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, IVType ivType, Boolean useValidationSymAlgo) +91 
    System.Web.UI.Page.EncryptStringWithIV(String s, IVType ivType) +83 
    System.Web.UI.Page.EncryptString(String s) +30 
    System.Web.Handlers.RuntimeScriptResourceHandler.GetScriptResourceUrlImpl(List`1 assemblyResourceLists, Boolean zip, Boolean notifyScriptLoaded) +1497 
    System.Web.Handlers.RuntimeScriptResourceHandler.System.Web.Handlers.IScriptResourceHandler.GetScriptResourceUrl(List`1 assemblyResourceLists, Boolean zip, Boolean notifyScriptLoaded) +1148 
    System.Web.Handlers.RuntimeScriptResourceHandler.System.Web.Handlers.IScriptResourceHandler.GetScriptResourceUrl(Assembly assembly, String resourceName, CultureInfo culture, Boolean zip, Boolean notifyScriptLoaded) +152 
    System.Web.Handlers.ScriptResourceHandler.GetScriptResourceUrl(Assembly assembly, String resourceName, CultureInfo culture, Boolean zip, Boolean notifyScriptLoaded) +37 
    System.Web.UI.ScriptManager.GetScriptResourceUrl(String resourceName, Assembly assembly) +105 
    System.Web.UI.ScriptRegistrationManager.RegisterClientScriptResource(Control control, Type type, String resourceName) +113 
    System.Web.UI.ScriptManager.System.Web.UI.IScriptManager.RegisterClientScriptResource(Control control, Type type, String resourceName) +14 
    System.Web.UI.ClientScriptManager.RegisterClientScriptResource(Control control, Type type, String resourceName) +53 
    System.Web.UI.WebControls.Menu.OnPreRender(EventArgs e, Boolean registerScript) +113 
    System.Web.UI.WebControls.Menu.OnPreRender(EventArgs e) +25 
    System.Web.UI.Control.PreRenderRecursiveInternal() +80 
    System.Web.UI.Control.PreRenderRecursiveInternal() +171 
    System.Web.UI.Control.PreRenderRecursiveInternal() +171 
    System.Web.UI.Control.PreRenderRecursiveInternal() +171 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +842 

Odpowiedz

2

Znalazłem, że gdy lokalna polityka bezpieczeństwa dla "Systemowej kryptografii: użyj algorytmów zgodnych z fps do szyfrowania, mieszania i podpisywania" (Ustawienia zabezpieczeń >> lokalne polityki >> securityOptions) jest ustawiona na wartość true, Sha1 nie będzie działać, z tego powodu otrzymuję błąd w tej sprawie.

+0

gdzie mogę zobaczyć tę opcję? - Ustawienia zabezpieczeń >> polityki lokalne >> securityOptions – codetoshare

+0

Wiem, że to jest stare, ale pomyślałem, że wstawię notatkę ... to ustawienie znajduje się w edytorze polityki grupowej (gpedit.msc) w obszarze Zasady komputera lokalnego> Konfiguracja komputera> Ustawienia systemu Windows> Ustawienia zabezpieczeń> Lokalne Polityki> Opcje bezpieczeństwa. Musisz je zmienić po zmianie. –

4

Czy używasz aplikacji w prawdziwie aplikacyjnej aplikacji .NET 2.0? (Pytam, ponieważ korzystasz z IIS 7.5).

Jeśli nie, należy pamiętać, że nastąpiła zmiana w algorytmach szyfrowania w środowisku .NET 4.5.

Jeśli muszą być zgodne z ramami < .NET 4.5 trzeba będzie tag Kompatybilność:

<machineKey compatibilityMode="Framework20SP1" /> 

Zobacz http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx lub http://blogs.msdn.com/b/webdev/archive/2012/10/23/cryptographic-improvements-in-asp-net-4-5-pt-2.aspx o szczegóły.

+0

Tak, że pula aplikacji dla mojej witryny jest skonfigurowana do używania .NET 2.0 – Ben

+0

Nadal możesz wypróbować tag zgodności, jeśli to nie działa, obawiam się, że jestem tutaj pusty. Przepraszam za to ...: | – Stefan

+0

Okay Próbowałem umieścić tag compatMode w sekcji machinekey zgodnie z sugestią, ale nadal otrzymuję ten sam błąd :( – Ben