我的一位同事非常热衷于签署集会.他确实试图签署任何东西.即使我们使用未经签名的Microsoft程序集,他也会获取源代码,签名,然后请其他开发人员使用他的副本.
我可以理解签署程序集的基本思想:确保特定程序集不会受到一些狡猾的黑客的影响.因此,如果我们是一家软件开发公司,我们应该在向客户发布一些.NET库之前签署我们的程序集.
但是,我们主要在这里开发自己使用的Web应用程序,而我无法看到签署我们使用的每个程序集的重点.
我在这里错过了什么吗?
use*_*100 60
我利用非签名的程序集来解决问题,然后在学术环境中向人们展示了为什么它很重要.我替换了一个未签名的DLL文件(再次在学术环境中),我使用相同的名称,相同的签名,并使用.NET Reflector复制和粘贴原始代码,但在我的电子邮件中,我通过电子邮件发送了用户名和密码在调用"真正的"代码之前被传入.
如果签名,您可以进行签名匹配,但不能替换.与Zippy所说的相反,会出现运行时补偿错误.
签名组件永远不会过度.这需要30秒.这就像说如果你住在这个国家,锁门就是矫枉过正.如果你想赌你的财物,请继续,保持开放.它只需要一次安全漏洞就会被解雇.签署一个程序集只需要30秒,而且没有商业案例.性能影响可以忽略不计.
Dre*_*kes 48
在可信环境中使用的签名程序集对我来说听起来有点过分.
对签名程序集的一个有趣的观点是它们加载的速度比无符号程序集稍慢,因为它们必须通过加密验证.
要对程序集进行签名,还必须对其所依赖的任何程序集进行签名.我的猜测是,这有助于你的同事签署所有内容的愿望 - 编译器要求它.
编辑自写这个答案后,您可以看到职业选手和反对阵营都有大致相同的支持.这里显然没有正确的答案.
强迫这种编辑的要点是,现在我们从NuGet中获取了如此多的开源库,其中许多都没有签名.如果要对程序集进行签名,则还需要签署任何依赖项.许多签名的开源库都有用于在其源存储库中公开签名的私钥.
与所有事情一样,需要进行权衡.根据我在私人环境中工作的经验,签名的好处主要是理论上的(或学术上的,如@ user289100提到的),除非你担心政府机构修改你的代码,在这种情况下你需要对这么多级别的你的基础设施,签署似乎是一个小小的努力.否则,必须签署所有内容的级联挑战似乎并不值得.但是,您的环境可能有不同的要求,或者您可能是受虐狂!
有关使用强名称时版本控制程序集相关挑战的信息,请参阅Teun D的答案.
Teu*_*n D 38
还有一点:签署程序集会破坏版本的向后兼容性.您的引用都开始包含版本号,其他版本号的版本被认为是不兼容的.这阻碍了升级到更新版本的分布式组件.
在我看来,如果你从中看到一些具体的收益,你应该只对代码签名:
你的同事有没有给你任何迹象表明他为什么喜欢签署集会?此处尚未讨论的签名的一个优点是,只有签名的程序集才能放入GAC(即在托管进程之间共享),但缺点似乎超过了我(公认的经验不足)的优势.
关于自签名微软代码的轶事似乎对我特别怀疑.如果MS没有签署代码,那可能是有原因的,对吧?通过签署,当你没有写下它时,你就要承担责任 - 这是未来咬你的另一个机会.
| 归档时间: |
|
| 查看次数: |
21491 次 |
| 最近记录: |