C#面试题更新 2026-08-05

请解释 .NET 程序集中的强名称概念及其签名机制的工作原理。

安全意识技术原理C#.NET

考察说明

考查候选人是否理解强名称的程序集标识作用与签名流程及其在 .NET 安全模型中的定位。

回答思路

  1. 【回答框架 1】强名称是 .NET 中唯一标识程序集的一组属性,包括名称、版本号、公钥令牌和文化信息。其作用在于提供全局唯一标识,防止不同程序集因同名冲突,并支持在全局程序集缓存中部署。
  2. 【回答框架 2】签名机制利用非对称加密:开发者用私钥对程序集内容生成签名,公钥嵌入程序集元数据,公钥令牌作为简短的标识。加载时 CLR 验证签名,确保内容未被篡改,且只有持有私钥的发布者才能生成有效签名。
  3. 【回答框架 3】强命名程序集只能引用其他强命名程序集,这建立信任链。验证失败会抛出异常,但需要注意强名称不保证代码安全性——它只保证来源和完整性,不包含权限或运行时的安全授权。
  4. 【回答框架 4】实际使用中,通过 sn.exe 生成密钥对,在项目设置或程序集特性中指定,构建时自动签名。延迟签名允许开发时用公钥占位,最终发布时再用私钥签名,但延迟签名程序集不能完全验证。
  5. 【关键点 1】强名称包括名称、版本、公钥令牌和文化,提供唯一标识。
  6. 【关键点 2】签名过程使用非对称加密私钥签名,公钥验证,确保完整性。
  7. 【关键点 3】CLR 加载时验证签名,失败则拒绝加载,但强名称不包含安全权限。
  8. 【关键点 4】强命名程序集只能引用其他强命名程序集。
  9. 【关键点 5】延迟签名支持分阶段开发,但最终需私钥签名。
  10. 【易错点 1】混淆强名称与数字证书,二者安全性保障范围不同。
  11. 【易错点 2】误以为强名称保证代码安全,实则为信任和完整性检查。
  12. 【易错点 3】将延迟签名误认为最终签名,导致运行时加载失败。