我的一位同事非常热衷于在大会上签名.他真的想签任何东西.即使我们使用来自Microsoft的未签名的程序集,他也会拿走源代码,对其签名,然后要求其他开发人员使用他的副本.

我可以理解签署程序集背后的基本思想:确保特定的程序集不会被某个狡猾的黑客攻破.因此,如果我们是一家软件开发公司,我们应该在向客户发布一些.NET库之前签署我们的程序集.

然而,我们在这里主要是为自己开发web应用程序,我看不出为我们使用的每个程序集签名有什么意义.

我错过什么了吗?

推荐答案

对在受信任环境中使用的程序集进行签名在我看来似乎有些过分.

关于已签名程序集的一个有趣之处在于,它们的加载速度比未签名的程序集稍慢,因为它们必须经过加密验证.

为了对程序集进行签名,它所依赖的任何程序集也必须经过签名.我的猜测是,这有助于您的同事对所有内容进行签名--编译器要求这样做.


EDIT.写下这个答案后,你可以看到赞成和反对阵营的支持率大致相当.这里显然没有正确的答案.

不过,迫使我们进行这次编辑的原因是,如今我们从NuGet中获取了如此多的开源库,其中很多根本没有签名.如果要对程序集进行签名,还需要对所有依赖项进行签名.许多已签名的开源库在其源代码存储库中公开提供了用于签名的私钥.

与所有事情一样,我们也需要做出权衡.根据我在私有环境中工作的经验,签名的好处大多是理论上的(或理论上的,就像@user289100次提到的那样),除非您担心政府机构修改您的代码,在这种情况下,您需要对您的基础设施的许多级别疑神疑鬼,以至于签名看起来像是一件很小的工作.否则,必须签署所有文件所带来的挑战似乎就不值得了.然而,你的环境可能有不同的要求,或者你可能是一个受虐狂!

有关使用强名称时与程序集版本控制相关的挑战的信息,请参见Teun D's answer.

.net相关问答推荐

跨请求共享数据

使用CLR将数据从Excel导入SQL Server时出错

正则表达式匹配 URL 中的多个子目录

类似于字典但没有值的 C# 数据 struct

如何使用 Moq 为不同的参数设置两次方法

.NET 中的线程安全集合

我什么时候应该在 C# 中使用使用块?

注册 COM 互操作与使程序集 COM 可见

.net:System.Web.Mail 与 System.Net.Mail

为什么 .NET 中不需要 Maven?

如何将 System.Type 转换为其可为空的版本?

mscorlib 代表什么?

.Net 正则表达式:单词字符 \w 是什么?

如何在 Action 中传递参数?

C# 中的 override 和 new 关键字有什么区别?

SqlBulkCopy 的推荐批量大小是多少?

如何将 MailMessage 对象作为 *.eml 或 *.msg 文件保存到磁盘

在 Windows 窗体 C# 应用程序中拥有配置文件的最简单方法

从 Visual Studio 2015 发布 - 允许不受信任的证书

如何使用 XmlSerializer 将字符串序列化为 CDATA?