我的公司在.Net Framework 3.5中使用ASP.NET创建项目,并使用Windows Web服务器2008 r2来托管项目。
在Web服务器中,我们启用了“系统加密:使用符合FIPS的算法进行加密,散列和签名”的设置
之后,应用程序无法运行。它显示以下错误
[InvalidOperationException: This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms.]
System.Security.Cryptography.RijndaelManaged..ctor() +7715396
System.Web.Configuration.MachineKeySection.ConfigureEncryptionObject() +232
System.Web.Configuration.MachineKeySection.EnsureConfig() +156
System.Web.Configuration.MachineKeySection.GetEncodedData(Byte[] buf, Byte[] modifier, Int32 start, Int32& length) +37
System.Web.UI.ObjectStateFormatter.Serialize(Object stateGraph) +166
System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Serialize(Object state) +4
System.Web.UI.Util.SerializeWithAssert(IStateFormatter formatter, Object stateGraph) +37
System.Web.UI.HiddenFieldPageStatePersister.Save() +79
System.Web.UI.Page.SavePageStateToPersistenceMedium(Object state) +105
System.Web.UI.Page.SaveAllState() +236
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1099
堆栈追踪:
<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="3DES" decryption="3DES"/>
<enforceFIPSPolicy enabled="false"/>
我们正在寻找解决方案。我们在网上找到的大多数解决方案都建议通过禁用“系统加密:使用符合FIPS的算法进行加密,散列和签名”的设置来禁用FIPS检查。 或者在web.config中添加这两行。
{{1}}
但出于安全考虑,我们不想为代码禁用FIPS检查。 相反,我们希望调整我们的代码或服务器设置,以便它在项目中强制执行FIPS策略并解释其功能。
任何人都可以就此提出任何想法吗?
答案 0 :(得分:1)
有一个相关的MSDN blog。请尝试以下注册表更改:
启用或禁用系统加密:使用符合FIPS的算法进行加密,散列和签名安全设置后,必须重新启动应用程序(如Internet Explorer)才能使新设置生效。
在您的情况下,回收网站的应用域应该足够了。
另请注意@Basic的评论,即在与政府系统进行交互的同时启用FIPS模式,可以cause other security headaches。
答案 1 :(得分:0)
从堆栈跟踪中看,您似乎正在使用Rijndael算法的托管版本。
根据{{3}},没有托管实施经过FIPS认证。
使用非托管实现应该可以解决您的问题:Rijnaed是AES的先驱-也许尝试this answer?
非托管实现的缺点是它们可能AesCng。