Windows代码签名过程& MS signtool.exe的替代?

时间:2013-08-13 14:17:16

标签: code-signing digital-signature

使用非Microsoft编译器,我已经编写了一个Windows小应用程序,我想免费赠送或出售一些微不足道的数量(5美元说)。该程序不使用注册表,但我想将其作为使用免费工具(例如InnoSetup)创建的安装程序可执行文件(例如MyAppInstall.exe)。

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

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

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

  3. 如果我每年向CA支付〜$ 100 ,我可以获得一个代码签名证书,这样我就可以 赠送有用的免费软件,可以轻松安装 - 不会出现可怕的和令人反感的对话。

  4. 我可以使用OpenSSL的Windows版本来创建自我认证的代码签名密钥。这样我就不必从MS下载安装590 MB的SDK文件,只是为了获得微软的makecert.exe

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

    < / LI> 问:有没有替代微软的signtool.exe

4 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分: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

答案 2 :(得分:0)

  

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

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

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

答案 3 :(得分:0)

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