在 Linux 机器上签署 NSIS 安装程序 [关闭]

问题描述 投票:0回答:3

目前我在 Linux 机器上使用 NSIS 为程序生成安装程序。 NSIS 二进制文件已经为 Ubuntu 编译,使用 .nsi 脚本没有任何困难。但是,生成的

setup.exe
文件是未签名的。这会导致通过最常见的网络浏览器下载安装程序的用户收到可怕的警告,以及运行时来自 Windows 本身的警告。

我们想避免这些警告,除非我遗漏了什么,否则需要使用 Windows 工具对生成的 setup.exe 文件进行签名。有没有办法在非 Windows 机器上执行此操作?

不幸的是,每个安装程序都是唯一的(根据客户的要求捆绑不同的文件,并包含一个唯一的 ID)所以我无法在 Windows 机器上签署安装程序然后上传它。

linux nsis
3个回答
7
投票

您最好的选择可能是使用:osslsigncode。为我轻松构建(确保有可用的 OpenSSL 标头)。不过,它可能在内核模式签名策略方面存在困难(将父证书嵌入到根目录中)——所以你最终可能仍然不得不求助于 WINE。


1
投票

几周前我不得不这样做,没有使用葡萄酒。我所做的是将 pfx 文件导入 Windows,然后使用“如果可能,在证书路径中包含所有证书”选项将其导出。然后我按照 this page 上的说明进行操作。

获得所有证书(spc 和 pvk 文件)后,您应该使用以下命令:

signcode -spc [spc file] -v [pvk file] -a sha1 -$ commercial -t http://timestamp.verisign.com/scripts/timstamp.dll -tr 10 [exe file to sign] 

我必须安装单开发包:

sudo apt-get install mono-devel

0
投票

Windows 的签名文件使用 Microsoft Authenticode 签名。 SDK 中有一个工具可以对可执行文件和 DLL 进行签名 (

signtool.exe
)。您也许可以使用 Wine 运行它。

也可以通过 Windows API 调用对文件进行签名——这些功能也可能在 Wine 中实现,但我对此表示怀疑,因为 Authenticode 仅由 Microsoft 使用和实现(据我所知)。

但是这个工具并没有太多作用——它基本上是在文件末尾附加证书和签名的时间戳。也可能存在针对 Linux 的改编版本。

这里是一个链接给使用签名代码的人。

© www.soinside.com 2019 - 2024. All rights reserved.