签署.NET程序集

8

我试图掌握.NET dlls/程序集的正式签名。

具体来说:

  • 何时以及如何使用私钥
  • 创建/控制私钥的最佳实践
  • 需要签名的模块类型/最佳实践

请参阅 .NET程序集签名的最佳实践? - Brian Rogers
5个回答

4
  1. 当您希望消费者知道这些组件确实来自您(而不是冒名顶替者)时
  2. 实体/组织的私钥应该只对少数人可访问,并保持锁定状态。在开发过程中使用延迟签名。
  3. 理想情况下,您应该为所有托管组件签名。

4

请参阅使用Strong Name Signatures的非常好的文章来进行签名。

如果我们谈论程序集的强名称,那么应该使用签名来防止第三方“欺骗”您的代码。强名称是程序集的一部分,因此具有相同名称和不同签名的另一个程序集是不同的程序集。这还可以防止程序集被修改并重新签名(无私钥)。

为了有用,私钥必须保持私密。这通常通过delayed signing和仔细管理私钥访问来实现。

您还可以使用Authenticode(对您的强名称程序集进行签名),这可以增加有关程序集实际来源的信心。


3
不要将强名称签名Authenticode签名混淆。
据微软描述(我直接向一位书的作者询问了),强名称只是一种版本控制方式,而不是身份验证。为了可靠性目的,程序集也存储在GAC中,并使用强名称公钥(您发布库的新版本时,旧版本不会被覆盖以防止旧应用程序中的回归错误)。
我不是100%确定,但Mono的System程序集与Microsoft的公钥匹配。并不是一种安全形式.............
相反,Authenticode签名用于执行代码身份验证。您需要从受信任的CA获得付费证书,并使用signtool.exe或Visual Studio签署程序集。
所有关于安全性、签名服务器等的内容都适用于这里。但重点是您没有指定要将哪种签名放入代码。

1
* When and how to use private keys
* Best practices for creation/control of private keys

你需要创建并使用一个密钥对(file.SNK文件)。只需要创建一次(为您的公司/部门),并妥善保管。

* What sort of modules need to be signed/ best practice for going about it

你需要签署进入GAC的库。但最好的做法是签署您发送的所有程序集。

当此签名的可靠性非常重要时,您可以使用“部分签名”和在发货前进行最终签名。这意味着不是每个开发人员都需要访问(真实/完整的)密钥对。


0
通常,代码签名对于你的产品是软件或者你工作在一个每个软件都受到审查的环境中非常有用。通过签署办公室的自定义软件,你可以将其置于比其他软件更高的信任关系中。
通常,你会生成私钥,然后在构建时,可以将该私钥附加到构建服务器上。这样可以防止公司内的开发人员访问私钥。
你签署的内容完全取决于你。我会说,在特定的信任环境下最容易出现绝对不工作的模块需要进行签名...例如,访问文件系统对象或数据库连接字符串的DLL。我只会养成签署最少量代码的习惯,然后从那里开始构建,否则,你就会冒着所有东西都被签署的风险,然后假定你组织中的所有内容都可以安全运行。再次强调,这完全取决于你组织的安全关注程度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接