为什么不应该将强命名用于安全性?

时间:2014-11-28 01:59:44

标签: .net security strongname

我已经在许多地方读过这个说法并让人们直接告诉我这一点,但是我无法找到关于强名不能用于安全的完整原因列表的确凿答案。

我理解强名称功能的意图是识别而不是安全,但我正在寻找使用强命名来确保安全问题的解释。

我想知道:

  • CLR在加载时验证程序集强名称的开箱即用。
  • 强命名的哪些功能会让人们尝试将其用于安全性。
  • 强命名的限制使其不适合安全。
  • 我们应该做些什么来实现人们使用强命名的安全性?

我不想要的东西:

  • 关于版本控制程序集的强命名限制
  • 与OSS相关的问题(例如,必须隐藏私钥,这使得贡献者很难)

1 个答案:

答案 0 :(得分:2)

人们告诉你不要使用强命名进行安全性(我认为你的意思是完整性检查)的原因是它不再有效。

从.NET 3.5 SP1开始,.NET程序集加载程序不再验证强名称程序集的完整性。如果要防止在磁盘上修改程序集,则必须使用Authenticode

这些链接描述了变更,异常及其背后的原因(启动速度):