Я пытаюсь настроить веб-приложение для работы в среде, где 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"/>
?