c# - 当项目开源时,谁应该拥有用于签署 .NET 程序集的私钥?

标签 c# .net security open-source

<分区>

更具体地说,是一个类库程序集。我的初步想法:

  • 让一些指定的管理员进行所有程序集签名。但是当错误修复和新版本被编写时,二进制文件最终将取决于它们是否存在(即使只是出于私有(private)原因的小改动)。
  • key 可以公开获得。但这违背了公钥加密实践,并且您失去了信任和身份的优势。
  • 允许最终开发人员和分销商使用自己的 key 对其进行签名。但是随后您失去了模块化,因为每个新签名都会使其与其他一些版本不兼容。

当然,您可以不在程序集上签名。但是,如果另一个需要对其程序集进行签名的项目引用了您的库,则会出现编译错误。

最佳答案

我最近在维护的一个开源项目中遇到了同样的问题。这是我解决这个问题的方法:

  • 源代码始终可通过存储库下载,但发布将包含源代码快照和编译版本。
  • 在提供编译版本之前,我使用我的私钥对程序集进行签名。

因此,在您的情况下,准备发布的人应该拥有 key 。库开发人员根本不需要了解它。

如果最终用户想要重新编译并使用他们自己的 key 签名,那很好。您可以通过比较签名程序集中存在的公钥来区分您和其他人的二进制文件。让公钥可用,其他人也可以这样做。

InternalsVisibleToAttribute 用于引用具有强名称的程序集时,管理此过程会变得有点麻烦。您可以阅读我如何解决该问题 here .

关于c# - 当项目开源时,谁应该拥有用于签署 .NET 程序集的私钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2021571/

相关文章:

c# - ffmpeginterop.uwp 库给出未注册错误

c# - 嵌套对象上的Elasticsearch过滤器范围

c# - 从 React 前端使用 API POST 到 Entity Framework Controller 时始终出现 null 异常

c# - 使用 LINQ 时谓词的顺序重要吗?

security - 如何保护 servlet 的访问?

java - 如何在 Java 中使用 .p12 文件对数据进行签名?

c# - 如何在处理经过的事件时阻止计时器?

c# - 为什么每个 Dispatcher.BeginInvoke 回调都有一个唯一的同步上下文?

.net - 从 Silverlight 调用 WCF 服务 : Somewhere my parameters are disappearing

java - 不使用 NoPadding 的 RSA 示例