延迟签名和.net中的强名称究竟是什么?

Dev*_*Das 20 .net c# delay-sign

我在很多文章中都看到过,延迟签名和程序集的强名称可以防止它出现问题.

那是什么意思?

我知道唯一没有强名称的是你无法在GAC中安装程序集.所以假设我有一个没有强名的集会,它可以被高压吗?

有人请澄清我的疑问.

Mic*_*eld 40

在MSDN上有很多关于此的信息; 例如:强命名延迟签名

总结一下基本思路:

强命名是一种使用简单的标识标记标记程序集的方法,稍后可以使用它来验证自部署之后它尚未被修改.强名称基本上是程序集名称,版本和开发人员独有的"强名称密钥"的哈希.对强名称程序集的引用会经过更严格的验证,引用非强名称的程序集; 特别是,强名称引用必须与版本号匹配,强名称哈希必须匹配.

这有助于避免程序中两个常见的潜在安全漏洞:

  1. 恶意用户使用具有相同文件名的不同程序集替换程序中的程序集,但该程序集包含恶意代码,并说服程序加载并执行它.
  2. 恶意用户使用同一程序集的不同版本替换程序中的程序集,但其中已知已修复的错误.

强名称进程将拒绝这两个操作,因为强名称数据将不匹配.这就是为什么GAC中的程序集必须具有强大的名称:它们无处不在地使用,否则它们将成为这种劫持的主要目标.

但请注意,强名称绝对不能验证发布者的身份.任何人都可以发布一个声称是微软的名字很强的集合,并且强名称中没有任何东西可以反驳这个断言.验证身份验证是Authenticode数字签名的工作,与强命名不同.这两者经常一起使用,但它们是正交概念.

延迟签名是一种在构建过程之外对程序集进行签名的技术.这里的想法是,您的公司可能有不允许强名称密钥在构建时可用的策略(可能它们保持脱机状态,或者在密码后面保护.)延迟签名程序集标记为空白强 - name key:它基本上为授权用户保留以后添加密钥的空间.同时,还包括部分强名称密钥 - 只有足够的信息可供其他程序集进行强引用,但不足以检测更改或修改.