C# web.config中的EnforceFipPolicy标志不';我似乎无法为web应用程序工作
我正在尝试设置一个web应用程序,使其在Windows注册表(特别是HKLM/SYSTEM/CurrentControlSet/Control/Lsa)中将C# web.config中的EnforceFipPolicy标志不';我似乎无法为web应用程序工作,c#,.net,asp.net,iis,fips,C#,.net,Asp.net,Iis,Fips,我正在尝试设置一个web应用程序,使其在Windows注册表(特别是HKLM/SYSTEM/CurrentControlSet/Control/Lsa)中将FIPSAlgorithmPolicy设置为1的环境中工作。启用此标志时,对类MD5CryptoServiceProvider的任何调用都将导致引发无效操作异常,并引发以下堆栈跟踪: [InvalidOperationException: This implementation is not part of the Windows Platf
FIPSAlgorithmPolicy
设置为1
的环境中工作。启用此标志时,对类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
根据我在中读到的内容,您应该能够将以下内容添加到配置文件中以禁用算法检查:
<configuration>
<runtime>
<enforceFIPSPolicy enabled="false"/>
</runtime>
</configuration>
这就是我访问页面时看到的:
这就引出了几个问题:
- 为什么IIS会抛出YSOD而不允许我的应用捕获异常
- 我需要做什么才能使我的web应用程序能够使用
- 1)。您的代码没有引发异常。ASP.NET正在做其他事情。ASP.NET正在尝试序列化ViewState;可以通过机器密钥对其进行加密。当ASP.NET在内部执行此操作时;它使用
RijndaelManaged
类(该类不符合FIPS 140;并且会爆炸。同样,当ASP.NET尝试加密/解密表单身份验证票证时,它也会使用机器密钥
对于机器密钥问题,您有几个选项。您可以使用3DES(通过将web.config中的MachineKey设置为如下所示,3DES将始终使用符合FIPS的实现:
<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="3DES" decryption="3DES" />
2) .我不知道为什么你的标志会被忽略。它不应该被忽略。如果我发现了什么,我会编辑它
请注意,
MD5CryptoServiceProvider
可能仍然会爆炸。MD5不是符合FIPS的哈希。据我所知,只有SHA-1和SHA-2哈希算法在.NET中。以CryptoServiceProvider
结尾的加密函数依赖于Windows CSP;它也承认该标志。另一种方法是使用而不是NET的实现,因为它不关心该标志。我认为您需要更新更多的文件
C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\
或包含devenv.exe.config的任何文件夹
``
保存Web.config文件。
重新启动Microsoft Internet信息服务(IIS)服务。若要执行此操作,请在命令提示符下运行以下命令:
iisreset
正如您所发现的,web.config条目不起作用,至少在iis 7.5 forward中是这样。相反,您需要使用一个应用程序池配置文件,如所述因此,即使它是旧的,它仍然有点相关。设置
<configuration>
<runtime>
<enforceFIPSPolicy enabled="false" />
</runtime>
</configuration>
进入Framework和/或Framework64.net文件夹中的aspnet.config。此绕过设置适用于应用程序配置文件。Web.config不是应用程序配置文件。如果将Cassini用作Web服务器,则是这样。但是,问题表明正在使用IIS。我不完全确定为什么要更改Visual Studio的policy是必需的;或者。@vcsjones-是的,你是对的。问题似乎与ASP使用RijndaelManaged处理视图状态数据有关。修复方法是按照建议将其更改为3DE。因此,实际上,我希望避免仅在VS本地使用的文件中更改配置(如
devenv.exe.config
和WebDev.WebServer.exe.config
),除非我知道运行我的应用程序需要在服务器上更改哪些文件,否则也可以在那里更改。这个答案可以通过提供服务器上需要更新的文件和路径来改进,或者解释除了web.config更新之外,那里没有任何需要的更改,以及为什么在运行ap的工作站上需要更改p在VS中本地,但不是服务器。回答得很好!配置中的标志应该与MD5CryptoServiceProvider
一起使用。至少……它应该在允许在控制台应用程序中使用该类的意义上起作用。好的,现在我有点进展了。添加机器键元素可以让我通过YSOD并进入我的应用程序。异常但仍被抛出。@Ben:现在实际轰炸的是MD5CryptoServiceProvider吗?没错。我是从e.ToString()
:得到这个消息的
`<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="3DES" decryption="3DES"/>`
<configuration>
<runtime>
<enforceFIPSPolicy enabled="false" />
</runtime>
</configuration>