如何使用有效签名创建预先配置的安装程序(MSI或EXE)?

时间:2014-05-22 12:15:49

标签: installation installer windows-installer digital-signature

我们希望用户下载适用于Windows的软件的预配置安装程序。预配置数据包含基于用户帐户数据的设置。自定义将在Linux上运行的Java服务器中完成。我们需要对这些安装程序进行数字签名。遗憾的是,由于安全策略,我们无法在这些服务器上拥有私人签名密钥。

你能想到在保留数字签名或其他方法来实现用例的同时将一些元数据放入MSI或EXE的方法吗?

编辑:要求是单个文件下载,所以不幸的是并行的ini文件无法实现。它主要是提供一组连接点(特定于用户) - 我们不会打扰用户,因为我们已经了解它们。

4 个答案:

答案 0 :(得分:2)

不,你要求的是不可能的。您无法修改文件而不会使其签名失效。这是签署的全部要点。您也无法在没有私钥的情况下签署文件来执行签名。

答案 1 :(得分:2)

我相信克里斯是对的。但是,为了提供进一步调查的有用起点,以下是一些想法:

虽然这可能是一个值得怀疑的设计,但您可以在服务器上生成包含配置信息的电子邮件并将其发送给用户,这样他们就可以使用属性中设置的相应设置从您的网站自动启动已签名的安装程序。只需点击电子邮件中的链接即可。我从未尝试过这个,但MSI SDK确实讨论过它:A URL-Based Windows Installer Installation ExampleAuthoring a Fully Verified Signed Installation

我猜你也可以生成一个通过电子邮件发送的INI文件,该文件可以放在签名的MSI旁边,MSI可以设计为在安装过程中读取INI文件并应用设置。您可以添加启动条件以要求此INI。

如果在未签名的自解压程序中使用签名的MSI包装配置文件,我认为您几乎消除了签名过程中的所有好处。我怀疑它有帮助,但应该可以签署由未签名的MSI消耗的外部cab文件。我再次尝试过,所以我只是在猜测。我不确定如果MSI在签署驾驶室后进行后处理会发生什么。安全方面我认为这种做法也是一种废话 - 几乎没有什么好处。

答案 2 :(得分:2)

您最好的办法是重新构建您的方法。如果只有少数结果配置,请提前构建它们。否则,您需要能够即时签名,或以未签名的方式分发选项。原因如下:

  • 更改文件不是首发,因为它会使数字签名无效而您无法重新应用它
  • 从Internet下载exe或msi时,也无法传递任意命令行参数
  • 即使您可以使用多个文件,将未签名的mst应用于msi也会使UAC提示无效,

以下是解决这些限制的一些想法:

  • 在msi的UI序列中询问配置。请求服务器当前尝试嵌入的参数,或者询问导致这些参数的选项并使用自定义操作来计算和/或检索它们。
    • 采取极端,这可能是:在线填写选项;得到一个代码;下载msi;安装,输入代码(它检索选项)。这可能是一个好的用户体验,只要他们不需要离线。
  • 找到传递参数的方法。例如,看起来ClickOnce可以接受参数作为其URL的一部分。 (参见How to: Retrieve Query String Information in an Online ClickOnce Application。)从表面上看,这似乎应该允许创建一个带有嵌入式msi文件的ClickOnce应用程序,该文件使用这些参数来配置msi。但是我不能肯定地说因为我没有构建这样的ClickOnce应用程序,而且我不清楚它可能在机器上放置的足迹。在离线方案中,这也可能会失败。

答案 3 :(得分:2)

与此同时,我找到了一种方法,可以在不使签名失效的情况下将数据添加到签名的EXE中是的,我也认为这是不可能的。这是一个可怕的黑客,它通过修改证书部分来工作,证书部分不是签名的一部分,它位于文件的末尾。因此,您可以追加到EXE的末尾,只是修复一下部分大小。我检查它有效,签名有效,程序运行,AntiVirus也没有抱怨。

方法描述:

添加有效载荷的工作程序:

显然,作为黑客行为,它可能会随时停止工作。