Windows代码签名过程及MS signtool.exe的替代方案?

5
使用非Microsoft编译器,我已经为Windows编写了一个小应用程序,我想要免费或以微不足道的价格(比如5美元)出售它。该程序不使用注册表,但我想使用可用工具(如InnoSetup)创建安装程序可执行文件(例如MyAppInstall.exe)。
根据签署Windows EXE文件和其他来源,我的理解如下:
  1. 如果我不签名安装程序,则Windows将弹出警告对话框,警告用户发布者未知,并建议他们不要运行软件。这是不可取的。

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

  3. 如果我每年支付大约100美元给CA,我可以获得代码签名证书,从而可以轻松地分发有用的免费软件 - 而无需出现令人恐慌和使人望而却步的对话框。

  4. 我可以使用Windows版OpenSSL创建用于代码签名的自签名密钥。这样我就不必下载并安装590 MB的SDK文件来获取Microsoft的makecert.exe

  5. 进退两难:我听说过的唯一代码签名工具是signtool.exe,但只能通过下载和安装至少590 MB的其他内容(SDK)来获得。

问:是否有替代Microsoft的signtool.exe的方法?

首先,使用自签名证书是无用的,因为它不能避免警告信息。除了signtool之外,您可以使用我们的SecureBlackbox编写自己的EXE签名工具,但这是商业性质的(在您的情况下没有意义)。我们曾计划制作一个类似于signtool的公共工具(signtool存在某些缺陷,我们希望避免),但这个计划仍然是计划,而不是正在进行的工作。虽然我认为,由于需求的存在,我们必须制作一个。 - Eugene Mayevski 'Callback
4个回答

7

这里有一个叫做kSign的工具,他们的博客上还有一篇关于如何与Inno Setup集成的文章。

它并不能完全替代signtool(即无法签名驱动程序包中涉及到的.cat和.sys文件),但它可以数字签名EXE、DLL、COM、CAB和OCX文件。


3

一种替代 signtool 的工具是 Monosigncode。Mozilla Developer Network 有一篇非常有用的文章,介绍了如何将证书转换为 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

Sign 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 的方式来输入口令短语。


0
尝试使用这个免费应用程序,它还允许您设置已签名可执行文件的其他属性,例如公司名称、详细信息、产品名称等。

所引用的链接不可用。该域似乎不存在或已被废弃。 - Br.Bill
1
非常抱歉,网站出现问题了。这是该软件的备用链接:https://www.codeproject.com/script/Membership/Uploads/5956881/signpe.zip - Michael Haephrati

0
Catch 22:我听说的唯一代码签名工具是signtool.exe,但必须下载并安装至少590 MB的其他内容(SDK)才能获得。
不需要安装整个SDK就可以安装signtool.exe。使用SDK Web安装程序,只选择安装“工具”即可。
然而,坏消息是,如果您没有CA签名证书,则没有签名工具可以帮助您绕过Windows警告,因为无法从无中创建任何东西。好消息是,许多CA为开源开发人员提供免费的代码签名证书,但您应该仅使用它来签署免费软件。所以,这是你的选择:向CA支付并继续销售你的软件,或者不付费并免费分发它。看起来很公平。

我在九月份尝试了Web安装程序,最小的选择(只有“.Net开发工具”)需要507.5 MB的“磁盘空间要求”。我能找到的唯一提供免费代码签名证书的CA是波兰的[Unizeto](https://sklep.unizeto.pl/en/ankieta/form.php),而且你必须同意让他们处理你的个人信息以进行营销。还有其他的CA建议吗? - RedGrittyBrick
如果软件是免费和开源的,但它有应用内购买,那么它是否有资格获得免费的CA签名证书? - orr burgel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接