我正试图找出在我的一个项目中使用Authenticode签署二进制文件的最简单,最安全的方法。
我能看到的最简单的方法是获取编译结果 - 一个包含所有二进制文件的完整安装包 - 从中提取程序集,签名,然后在MSI中重新打包这些签名的程序集,然后得到签名。
有很多关于从MSI解压缩文件的信息,但没有关于重新打包它们的信息。我该怎么做?
答案 0 :(得分:1)
编辑原始回复......
如果要将登录嵌入到无人参与的构建过程中,可以使用MSBuild SignFile任务,该任务包装authenticode签名API http://msdn.microsoft.com/en-us/library/ms164304.aspx
或者只使用对SignTool.exe的调用。
您需要使用certmgr.exe或证书mmc snapin将软件发布证书安装到计算机上。一旦将其安装到本地证书存储区中,您只需使用SHA指纹引用它,您可以在证书属性上找到它,或者只在certmgr.exe中列出证书。
我们必须定期更新我们的证书,以便我们在构建中有额外的步骤,以便在构建开始时在本地重新导入证书,并提取证书哈希。我建议不要在源控件中存储哈希,以防你必须返回并构建一个旧版本 - 它应该是你的环境配置的一部分,例如一个env var或其他可以与源代码分离的东西。
此外,不要忘记为签名文件添加时间戳,以便保证签名的有效性。我还建议你将签名与时间戳分开。时间戳是一种偶尔会出错的网络操作,因此能够区分签名失败和时间戳失败是有用的,因为时间戳失败只是可能公开发布的黄金版本的问题。
答案 1 :(得分:1)
你没有陈述你的构建系统是什么,但是我的项目经历的(过度简化的)流程如下(我使用几乎所有东西的任务,从CruiseControl.net触发)
signtool.exe
签署所有相关文件(例如exe,dll,ocx)如果它在任何地方失败,那么只需发送电子邮件给开发团队。
您应该能够使用MSBuild,Nant或其他各种工具执行此操作。它可能涉及到一些地方的自定义工作,但最终结果是一个可靠的构建系统,需要零人与构建的交互(除非有人想'强制'构建,即使是只需点击网页上的按钮或其他内容)