我有一个由五个项目组成的解决方案,每个项目都编译为单独的程序集.现在我正在对它们进行代码签名,但我很确定我做错了.这里的最佳做法是什么?
用不同的密钥签名; 确保密码不同
用不同的密钥签名; 如果需要,请使用相同的密码
用相同的密钥签名
还有别的东西
基本上我不太确定"签名"对他们有什么影响,或者最佳实践是什么,所以更普遍的讨论会很好.我真正知道的是,FxCop对我大吼大叫,点击"签署此程序集"复选框并使用Visual Studio(2008)生成.pfx文件很容易修复.
如果您的唯一目标是阻止FxCop对您大吼大叫,那么您已经找到了最佳实践.
签署程序集的最佳做法完全取决于您的目标和需求.我们需要更多信息,例如您的预期部署:
供个人使用
用于企业网络PC作为客户端应用程序
在Web服务器上运行
在SQL Server中运行
通过互联网下载
在收缩包装的CD上出售
直接上传到控制论大脑
等等.
通常,您使用代码签名来验证程序集是否来自特定的受信任源并且尚未进行修改. 所以每个人都有同样的关键是好的. 现在,如何确定这种信任和身份是另一回事.
更新: 当您通过Web部署时,如果您从证书颁发机构获得了软件签名证书,那么这对您的最终用户有何益处.然后,当他们下载您的程序集时,他们可以验证它们来自Domenic的软件商场,并且它们在此过程中没有被修改或损坏.您还需要在下载安装程序时对其进行签名.这可以防止某些浏览器显示已从未知来源获取的警告.
请注意,您将支付软件签名证书.你得到的是证书颁发机构成为值得信赖的第三方,它会验证你是谁.这是因为信任网络可以追溯到安装在其操作系统中的根证书.有一些证书颁发机构可供选择,但您需要确保它们受目标操作系统上的根证书支持.
有符号和无符号程序集之间最明显的区别在于ClickOnce应用程序.如果您不对其进行签名,则用户在第一次运行您的应用程序时会收到一个可怕的"未知发布者"警告对话框.如果您使用来自受信任机构的证书对其进行签名,那么他们会看到一个不那么可怕的对话框.据我所知,使用您自己生成的证书进行签名不会影响"未知发布者"警告.来自Comodo的即时SSL提供了对话框的示例.
有一些微妙的差异.您必须先签署程序集,然后才能将其安装到全局程序集缓存(GAC)中,以便多个应用程序共享它.签名是代码访问安全性(CAS)的组成部分,但我没有找到任何可以让CAS工作的人.我很确定GAC和CAS都可以使用您自己生成的证书.