我们希望用户下载适用于Windows的软件的预配置安装程序。预配置数据包含基于用户帐户数据的设置。自定义将在Linux上运行的Java服务器中完成。我们需要对这些安装程序进行数字签名。遗憾的是,由于安全策略,我们无法在这些服务器上拥有私人签名密钥。
你能想到在保留数字签名或其他方法来实现用例的同时将一些元数据放入MSI或EXE的方法吗?
编辑:要求是单个文件下载,所以不幸的是并行的ini文件无法实现。它主要是提供一组连接点(特定于用户) - 我们不会打扰用户,因为我们已经了解它们。
答案 0 :(得分:2)
不,你要求的是不可能的。您无法修改文件而不会使其签名失效。这是签署的全部要点。您也无法在没有私钥的情况下签署文件来执行签名。
答案 1 :(得分:2)
我相信克里斯是对的。但是,为了提供进一步调查的有用起点,以下是一些想法:
虽然这可能是一个值得怀疑的设计,但您可以在服务器上生成包含配置信息的电子邮件并将其发送给用户,这样他们就可以使用属性中设置的相应设置从您的网站自动启动已签名的安装程序。只需点击电子邮件中的链接即可。我从未尝试过这个,但MSI SDK确实讨论过它:A URL-Based Windows Installer Installation Example和Authoring a Fully Verified Signed Installation。
我猜你也可以生成一个通过电子邮件发送的INI文件,该文件可以放在签名的MSI旁边,MSI可以设计为在安装过程中读取INI文件并应用设置。您可以添加启动条件以要求此INI。
如果在未签名的自解压程序中使用签名的MSI包装配置文件,我认为您几乎消除了签名过程中的所有好处。我怀疑它有帮助,但应该可以签署由未签名的MSI消耗的外部cab文件。我再次尝试过,所以我只是在猜测。我不确定如果MSI在签署驾驶室后进行后处理会发生什么。安全方面我认为这种做法也是一种废话 - 几乎没有什么好处。
答案 2 :(得分:2)
您最好的办法是重新构建您的方法。如果只有少数结果配置,请提前构建它们。否则,您需要能够即时签名,或以未签名的方式分发选项。原因如下:
以下是解决这些限制的一些想法:
答案 3 :(得分:2)
与此同时,我找到了一种方法,可以在不使签名失效的情况下将数据添加到签名的EXE中是的,我也认为这是不可能的。这是一个可怕的黑客,它通过修改证书部分来工作,证书部分不是签名的一部分,它位于文件的末尾。因此,您可以追加到EXE的末尾,只是修复一下部分大小。我检查它有效,签名有效,程序运行,AntiVirus也没有抱怨。
方法描述:
添加有效载荷的工作程序:
显然,作为黑客行为,它可能会随时停止工作。