![在开发和生产环境中是否应该使用相同的机器密钥?](https://linux22.com/image/510159/%E5%9C%A8%E5%BC%80%E5%8F%91%E5%92%8C%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E6%98%AF%E5%90%A6%E5%BA%94%E8%AF%A5%E4%BD%BF%E7%94%A8%E7%9B%B8%E5%90%8C%E7%9A%84%E6%9C%BA%E5%99%A8%E5%AF%86%E9%92%A5%EF%BC%9F.png)
我们的生产服务器都具有相同的机器密钥。但是,我们的生产和开发系统没有相同的机器密钥。我们收到大量(大约每秒一个)以下形式的异常
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
答案是不。
不使用相同机器密钥的原因是开发人员不应该看到生产环境密钥。如果您有前员工或外部顾问,您无法保证他们不会将开发代码传播到某个地方。如果密钥落入坏人之手,很容易对服务器造成攻击。
这里是一个很好的链接。