Я пытаюсь настроить веб-приложение для работы в среде, где FIPSAlgorithmPolicy
установлен на 1
в реестре Windows (в частности, HKLM / SYSTEM / CurrentControlSet / Control / Lsa). Когда этот флаг включен, любой вызов класса MD5CryptoServiceProvider
вызовет выброс Invalid Operation Exception
со следующей трассировкой стека:
[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
На основании того, что я прочитал в в этой статье, вы должны иметь возможность добавить в файл конфигурации следующее, чтобы отключить проверку алгоритма:
<configuration>
<runtime>
<enforceFIPSPolicy enabled="false"/>
</runtime>
</configuration>
У меня это работает в тестовом консольном приложении, изменив его 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;
}
И вот что я вижу, когда захожу на страницу:
Таким образом, возникает пара вопросов:
- Почему IIS выдает YSOD вместо того, чтобы разрешить моему приложению перехватить исключение?
- Что мне нужно сделать, чтобы мое веб-приложение могло использовать
<enforceFIPSPolicy enabled="false"/>
?