Windows 代码签名过程和 MS signtool.exe 的替代方案? [关闭]

Posted

技术标签:

【中文标题】Windows 代码签名过程和 MS signtool.exe 的替代方案? [关闭]【英文标题】:Windows Code-Signing process & alternative to MS signtool.exe? [closed] 【发布时间】:2013-08-15 05:12:17 【问题描述】:

使用非 Microsoft 编译器,我编写了适用于 Windows 的小型应用程序,我想免费赠送或以微不足道的价格出售(比如 5 美元)。该程序不使用注册表,但我想将其作为使用免费提供的工具(例如 InnoSetup)创建的安装程序可执行文件(例如 MyAppInstall.exe)提供。

来自Signing a Windows EXE file和其他来源,我的理解如下:

    如果我不签署安装程序,Windows 将弹出一个警告对话框,警告用户发布者未知,并建议他们不要运行该软件。这是不可取的。

    如果我使用自认证密钥签署安装程序,弹出对话框将至少提供发布者名称而不是“未知”。它会说发布者无法验证或发布者不受信任。这可能比被描述为 unknown 出版商要好一些。

    如果我每年向 CA 支付约 100 美元,我可以获得代码签名证书,让我能够 赠送易于安装的有用免费软件 - 不会出现可怕和令人反感的对话。

    我可以使用 Windows 版本的 OpenSSL 创建一个用于代码签名的自认证密钥。这样我就不必为了获得微软的makecert.exe

    而从 MS 下载安装 590 MB SDK 文件

    Catch 22:我听说的唯一代码签名工具是signtool.exe,它只能通过下载并安装至少 590 MB 的其他东西(SDK)来获得。

问:有没有微软signtool.exe的替代品

【问题讨论】:

首先,使用自签名证书是没有用的,因为它不会让您免于警告消息。除了signtool,您还可以使用我们的SecureBlackbox 编写您自己的EXE 签名器,但那是商业的(这在您的情况下没有意义)。我们计划制作一个类似于 signtool 的公共工具(signtool 有一些我们希望避免的缺点),但这个计划仍然是一个计划,尚未进行中。不过,我认为,我们必须根据需求制作一个。 【参考方案1】:

有kSign,他们的博客也有一篇关于how to integrate with Inno Setup的文章。

它不是 signtool 的完全替代品(即它不会对签署驱动程序包所涉及的 .cat 和 .sys 文件进行签名),但它将对 EXE、DLL、COM、CAB 和 OCX 文件进行数字签名。

【讨论】:

【参考方案2】:

Catch 22:我听说过的唯一代码签名工具是 signtool.exe 只能通过下载安装至少590获得 MB 的其他东西(SDK)。

没有。您无需安装整个 SDK 即可安装 signtool.exe。使用 SDK Web 安装程序并选择仅安装“工​​具”。

但是,坏消息是,如果您没有 CA 签名证书,则没有签名工具可以帮助您绕过 Windows 警告,因为不可能从无到有地创建某些东西。好消息是许多 CA 为开源开发人员提供免费的代码签名证书,但您应该只使用它来签署免费软件。因此,这是您的选择:向 CA 付费并继续销售您的软件,或者不付费并免费分发。看起来很公平。

【讨论】:

我在 9 月份尝试了 Web 安装程序,最小的选择(只是“.Net 开发工具”)产生了 507.5 MB 的“磁盘空间要求”。我能找到的唯一一家提供免费代码签名证书的 CA 是波兰的 Unizeto - 您必须允许他们处理您的个人详细信息以用于营销目的。还有其他 CA 建议吗?【参考方案3】:

signtool 的替代品是Mono 的signcode。 Mozilla 开发者网络有一个very useful article 用于将您的证书转换为 SPC/PVK 格式并使用 Authenticode 签署您的 EXE:

将 PFX 转换为 SPC/PVK

openssl pkcs12 -in authenticode.pfx -nocerts -nodes -out key.pem
openssl rsa -in key.pem -outform PVK -pvk-strong -out authenticode.pvk
openssl pkcs12 -in authenticode.pfx -nokeys -nodes -out cert.pem
openssl crl2pkcs7 -nocrl -certfile cert.pem -outform DER -out authenticode.spc

签署EXE

signcode \
 -spc authenticode.spc \
 -v authenticode.pvk \
 -a sha1 -$ commercial \
 -n My\ Application \
 -i http://www.example.com/ \
 -t http://timestamp.verisign.com/scripts/timstamp.dll \
 -tr 10 \
 MyApp.exe

密码短语

与接受密码短语作为命令行参数的signtool 不同,似乎signcode 必须在标准输入中提供密码短语。我可以使用signcode [arguments] < passphrase.txt

【讨论】:

【参考方案4】:

试试this free application,它还允许您设置已签名可执行文件的其他属性,例如公司名称、详细信息、产品名称等。

【讨论】:

引用的链接不可用。该域似乎不存在或已被放弃。 很抱歉。网站有问题。这是软件的替代链接codeproject.com/script/Membership/Uploads/5956881/signpe.zip

以上是关于Windows 代码签名过程和 MS signtool.exe 的替代方案? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥在查看证书详细信息之前,数字签名的可执行文件会被视为未签名

Windows 代码签名证书信任期

ClickOnce 发布 Signtool 错误

Windows密钥容器和证书的关系

Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御

Windows 硬件开发人员怎样选择代码签名证书类型