我们的生产服务器都具有相同的机器密钥。但是,我们的生产和开发系统没有相同的机器密钥。我们收到大量(大约每秒一个)以下形式的异常
System.Security.Cryptography.CryptographicException: Padding is invalid and cannot be removed.
at System.Security.Cryptography.RijndaelManagedTransform.DecryptData()
at System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock()
at System.Security.Cryptography.CryptoStream.FlushFinalBlock()
at System.Web.Configuration.MachineKeySection.EncryptOrDecryptData()
at System.Web.UI.Page.DecryptStringWithIV()...
我们在构建后部署代码,.cs 源在生产中不存在。aspx 文件存在于生产中。
(我应该在 Stack Overflow 上发帖吗?这不是一个编码问题。)
通过实验,我们发现使用 dev machine 密钥值会导致异常消失。是否有人有文档可以供我与安全团队参考,说明在编译和部署时是否需要相同的密钥?
答案1
答案是不。
不使用相同机器密钥的原因是开发人员不应该看到生产环境密钥。如果您有前员工或外部顾问,您无法保证他们不会将开发代码传播到某个地方。如果密钥落入坏人之手,很容易对服务器造成攻击。
这里是一个很好的链接。