Флаг enforceFIPSPolicy в web.config, похоже, не работает для веб-приложения

Я пытаюсь настроить веб-приложение для работы в среде, где FIPSAlgorithmPolicy установлен на 1 в реестре Windows (в частности, HKLM / СИСТЕМА / CurrentControlSet / Control / Lsa). Когда этот флаг включен, любой вызов класса MD5CryptoServiceProvider вызовет исключение недопустимой операции со следующей трассировкой стека:

[InvalidOperationException: This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms.]
   System.Security.Cryptography.RijndaelManaged..ctor() +10480142
   System.Web.Configuration.MachineKeySection.ConfigureEncryptionObject() +439
   System.Web.Configuration.MachineKeySection.EnsureConfig() +152
   System.Web.Configuration.MachineKeySection.GetEncodedData(Byte[] buf, Byte[] modifier, Int32 start, Int32& length) +48
   System.Web.UI.ObjectStateFormatter.Serialize(Object stateGraph) +381
   System.Web.UI.Util.SerializeWithAssert(IStateFormatter formatter, Object stateGraph) +59
   System.Web.UI.HiddenFieldPageStatePersister.Save() +89
   System.Web.UI.Page.SaveAllState() +1117
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3864

На основе того, что я прочитал в ] эту статью , вы должны иметь возможность добавить в свой файл конфигурации следующее, чтобы отключить проверку алгоритма:


    
        
    

Это работает для меня в тестовом консольном приложении, изменив его app.config. Однако, похоже, это не работает при изменении web.config веб-приложения .NET 2.0.

Меня интересует то, что, хотя я перехватываю все исключения, когда создаю экземпляр MD5CryptoServiceProvider в коде, похоже, он даже не попадает в эту часть моего кода. Это код, который вызывается в моем тестовом приложении:

    protected string printSomething()
    {
        string toPrint = String.Empty;
        try
        {
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            toPrint = "Created algorithm.";
        }
        catch (Exception e)
        {
            toPrint = e.ToString();
        }
        return toPrint;
    }

И вот что я вижу, когда захожу на страницу:

screenshot of YSOD

Таким образом, возникает пара вопросов:

  • Почему IIS выдает YSOD вместо того, чтобы разрешить мое приложение перехватило исключение?
  • Что мне нужно сделать, чтобы мое веб-приложение могло использовать ?

10
задан Ben McCormack 11 July 2011 в 15:48
поделиться