我们的生产服务器都具有相同的机器密钥。但是,我们的生产和开发系统没有相同的机器密钥。我们得到一堆(大约每秒一个)形式的异常
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 机器键值会导致异常消失。有没有人有我可以与安全团队一起使用的关于在编译和部署时需要相同密钥的文档?
答案是不。
不使用相同机器密钥的原因是开发人员不应该看到生产环境密钥。如果您有前员工或外部顾问,您不能保证他们不会将开发代码传播到某个地方。在坏人手中,密钥很容易攻击服务器。
这是一个很好的链接。