2010-10-26 120 views
2

我想弄清楚在我的一个项目中Authenticode签名二进制文件的最简单和最安全的方法。在MSI中解压缩,修改和重新打包文件?

我能看到的最简单的方法是获取编译结果 - 一个包含我所有二进制文件的完整安装包 - 从中​​提取程序集,签名它们,然后重新包装MSI中的这些签名程序集然后得到签名。

很多关于从MSI解压文件的信息,但没有关于重新打包它们的信息。我该怎么做?

+0

你好请问你有没有发现一个问题的答案?我也有兴趣通过一种方法来安全地做到这一点。我也看到了你的其它类似的问题:http://stackoverflow.com/questions/4026044/how-do-you-integrate-authenticode-into-your-build-process。今天有什么指针? – 2011-03-03 10:50:06

+0

@Seb不幸的不是。任何这些都没有自动化解决方案。我仍然希望为之一,但目前我必须手动执行发布构建签名构建安装程序过程。 – Will 2011-03-03 14:09:14

+0

好的,谢谢你的输入。 – 2011-03-03 14:55:47

回答

1

编辑我的原始响应....

如果要嵌入登录到您的无人值守的构建过程中,你可以使用的MSBuild SignFile任务,它包装的验证码签名的API http://msdn.microsoft.com/en-us/library/ms164304.aspx

或者只是使用对SignTool.exe的调用。

您需要使用certmgr.exe或证书mmc snapin将软件发布证书安装到计算机上。安装到本地证书存储区后,只需使用SHA指纹进行引用即可在证书属性中找到该证书,或者只需在certmgr.exe中列出证书即可。

我们必须定期更新我们的证书,以便我们在构建中有额外的步骤,在构建开始时在本地重新导入证书,并提取证书哈希。我建议不要在源代码控制中存储哈希值,以防止必须返回并构建旧版本 - 它应该是您环境配置的一部分,例如,一个env var或者其他可以与源代码分离的东西。

此外,不要忘了给签名文件加上时间戳,以保证签名的有效性。我还建议你将时间戳中的签名分开。时间戳是一种偶尔会出错的网络操作,因此能够区分签名失败和时间戳失败很有用,因为时间戳失败只是可能公开发布的黄金版本的一个问题。

1

你没有说明你的编译系统是什么,但(过于简化)流我的项目经历如下

    (我使用恶性任务几乎一切,从CruiseControl.net触发)
  1. 抓住一切从源头控制
  2. 构建清洁工程
  3. 抢签名的文件
  4. 使用signtool.exe标志的所有相关文件(例如EXE,DLL,OCX)
  5. 构建MSI (与维克斯)
  6. 请在MSI一些自定义生成后任务
  7. 数字签名的MSI
  8. (根据构建参数)与引导程序
  9. 压缩MSI登录引导程序
  10. 上传到临时区域
  11. 电子邮件构建的Dev + QA团队已准备好进行测试。

如果沿途任何地方发生故障,则不仅仅是电子邮件的开发团队。

你应该能够MSBuild的,南特,或其他各种工具来做到这一点。它可能会涉及到地方一点点的定制工作,但最终的结果是可靠的构建系统,需要与构建人机交互(除非有人想“力”的生成,甚至只是点击一个按钮网页或东西)

+0

似乎是一周的工作,以找出如何设置这一切。 TFS在这里,顺便说一句。任何详细的教程? – Will 2011-04-12 12:49:26

+0

也从没使用TFS,但这个版本系统已经发展超过三年......我们刚开始的基本知识,并在有一点版本之间的停机时间的自动化更随着时间的推移。 – saschabeaumont 2011-04-18 01:57:45