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
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 的替代方案? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥在查看证书详细信息之前,数字签名的可执行文件会被视为未签名