签署Windows EXE档案


178

我有一个我要签名的EXE文件,以便Windows不会警告最终用户有关来自“未知发行商”的应用程序。我不是Windows开发人员。所讨论的应用程序是从生成屏幕保护程序应用程序的应用程序生成的屏幕保护程序。因此,我对文件的生成方式没有任何影响。

我已经发现,我需要来自Verisign或Instantssl.com 这样的CA代码签名证书。我不了解的是我需要做的(如果有可能)对我的EXE文件进行签名。有什么简单的解释?

梅尔·格林(Mel Green)的回答使我走得更远,但是signtool希望我指定在任何情况下都使用哪种证书。我可以某种方式获得免费的代码签名证书以测试它是否对我完全有效吗?

另外,请指定哪种证书类型是正确的。大多数站点仅提及“代码签名”,并谈论对用户实际编译的应用程序进行签名。对我来说不是这样。


3
只是好奇-购买证书需要支付多少费用?
InTheNameOfScience

2
@Rigel大约每年$ 400,可能不值:)
Sharan Arumugam

@SharanArumugam:WHAAT ?????? 就像Microsfot反对廉价/免费软件一样!
InTheNameOfScience,

Answers:


115

您可以尝试使用Microsoft的签名工具

您将其作为Windows Server 2008和.NET 3.5的Windows SDK的一部分下载。下载后,您可以从命令行使用它,如下所示:

signtool登录/ a MyFile.exe

这将使用可用的“最佳证书”对单个可执行文件进行签名。(如果您没有证书,它将显示一个SignTool错误消息。)

或者您可以尝试:

signtool signwizard

这将启动一个向导,该向导将引导您完成对应用程序的签名。(此选项在Windows SDK 7.0之后不可用。)


如果您想获得可用于测试对可执行文件进行签名的过程的证书,则可以使用.NET工具Makecert

证书创建工具(Makecert.exe)

一旦创建了自己的证书并使用它来对可执行文件进行签名,就需要将其手动添加为计算机的受信任根CA,以使UAC告诉运行该证书的用户来自受信任源。重要的以根CA身份安装证书将危及用户的隐私。看看戴尔发生了什么。您可以在代码中和通过Windows找到更多有关完成此操作的信息:

希望能为尝试这样做的人提供更多信息!


:在不同的问题的工作流程stackoverflow.com/questions/84847/...
The_Ghost

4
“此工具随Visual Studio一起自动安装。要运行该工具,请使用Developer Command Prompt(或Windows 7中的Visual Studio Command Prompt)。” msdn.microsoft.com/en-us/library/8s9b9yaz(v=vs.110).aspx
Westy92 2014年

也对signtool使用的证书感到非常好奇。
Overdrivr

1
Windows SDK 7.0之后,“ signwizard”选项不可用
Omar Reis

不建议使用Makecert,而应使用PowerShell cmdlet New-SelfSignedCertificate创建测试证书。stackoverflow.com/a/51443366/38117911中的详细信息(由The_Ghost链接的问题的答案)。
亚历山大·雷沃

35

我在工作中遇到了相同的情况,这是我们的发现

您要做的第一件事是获取证书并将其安装在计算机上,您可以从证书颁发机构购买证书,也可以使用makecert生成证书

这是2个选项的利弊

购买证书

  • 优点
    • 使用由CA(证书颁发机构)颁发的证书将确保Windows不会警告任何最终用户有关使用CA证书的任何计算机上“未知发行者”的应用程序的信息(OS通常随附manny CA的根证书) )
  • 缺点:
    • 从CA获得证书涉及成本

使用Makecert生成证书

  • 优点:
    • 步骤很容易,您可以与最终用户共享证书
  • 缺点:
    • 最终用户将不得不在自己的计算机上手动安装证书,具体取决于您的客户端(可能不是)
    • 使用makecert生成的证书通常用于开发和测试,而不是生产

签名可执行文件

有两种对所需文件进行签名的方法:

  • 使用计算机上安装的证书

    signtool.exe标志/ a / s MY / sha1 sha1_thumbprint_value / t http://timestamp.verisign.com/scripts/timstamp.dll / v“ C:\ filename.dll”

    • 在此示例中,我们使用存储在“个人”文件夹中的证书以及SHA1指纹(此指纹来自证书)来对位于“ C:\ filename.dll”的文件进行签名。
  • 使用证书文件

    signtool登录/ tr http://timestamp.digicert.com / td sha256 / fd sha256 / f“ c:\ path \ to \ mycert.pfx” / p pfxpassword“ c:\ path \ to \ file.exe”

    • 在此示例中,我们使用证书“ c:\ path \ to \ mycert.pfx”和密码pfxpassword对文件“ c:\ path \ to \ file.exe”进行签名。

测试您的签名

方法1:使用signtool

转到:“开始”>“运行CMD类型”>单击“确定”。在命令提示符下,输入signtool所在的目录,运行以下命令:

signtool.exe验证/ pa / v“ C:\ filename.dll”

方法2:使用Windows

右键单击已签名的文件,然后选择“属性”,然后选择“数字签名”选项卡。签名将显示在“签名列表”部分。

希望对您有帮助

资料来源:


很高兴我可以帮助@PhilLab
Erick Castrillo

也请提供$$$$的估算值。谢谢!
InTheNameOfScience,


30

如果您正在进行开源开发,则可以从Certum获得免费的廉价代码签名证书。

我使用他们的证书已有一年多了,它确实摆脱了Windows中未知的发布者消息。

至于签名代码,我使用如下脚本中的signtool.exe

signtool.exe sign /t http://timestamp.verisign.com/scripts/timstamp.dll /f "MyCert.pfx" /p MyPassword /d SignedFile.exe SignedFile.exe

3
它看起来不再免费了,仍然便宜得多,14欧元
hultqvist

1
没错,它看起来不再免费了。之后我刚刚续签,却没有支付任何费用。也许我是祖父。也许他们的内部流程被打破了。他们的网站肯定很复杂。
李·理查森


Certum商店表示其开放源代码证书不会删除Microsoft SmartScreen筛选器消息。
Markus Laire

17

ASP的ASPects杂志对如何签名代码进行了详细描述(您必须是会员才能阅读本文)。您可以通过http://www.asp-shareware.org/下载它

这里的链接描述了如何制作自己的测试证书

也可能很有趣。


7
四年后的附录:Comodo在2012年初的某个时候受到了攻击(blogs.comodo.com/it-security/data-security/…),因此许多用户代理现在拒绝了具有Comodo根权限的证书
A. Wilson

8
在2013年中期,Comodo是否仍然是一个冒险的赌注,“用户代理”是否意味着Microsoft / Windows无疑是他们决定是否显示臭名昭著的“未知发行者”消息的人。
Dan W

抱歉,删除了明确的服务建议,这些建议是:1)已过时,2)现在已被排除在主题之外(因为1.)。
deceze



4

还有另一种选择,如果您正在Windows 10上进行开发,但未安装Microsoft的signtool.exe,则可以在Windows上的Ubuntu上使用Bash对应用程序进行签名。这是一个失败:

https://blog.synapp.nz/2017/06/16/code-signing-a-windows-application-on-linux-on-windows/


osslsigncode也可以在中使用cygwin,因此,如果您已经在使用(如我所用),则可以登录当前环境,而无需切换到WSL。
thoni56

4

使用以下链接来签名.exe(安装程序/安装程序)文件(不使用Microsoft安装程序签名工具来签名exe /安装程序文件)

https://ebourg.github.io/jsign/#files

示例命令java -jar jsign-2.0.jar --keystore keystore.jks“ --alias别名--storepass密码MyInstaller.exe

为我工作:)


3

这不是问题的直接答案,但与之密切相关(我希望这是有用的),因为程序员迟早会把手伸进钱包里:

因此,EV签名的价格:

1年$ 350 +($ 50隐性费用)
2年$ 600
3年$ 750
[www.ksoftware.net] [3]
eToken作为USB记忆棒发送。无需读者。
您实际上是从Comodo(Sectigo)购买的

1年350欧元
3年799欧元
sklep.certum.pl

1年$ 499 USD
3年$ 897 USD
sectigo.com

1年$ 410总计
2年$ 760总计
3年$ 950总计
www.globalsign.com

1年:$ 600(过去是$ 104)
3年:?
www.digicert.com

1年:700美元
3年:可笑的昂贵
[ https://trustcenter.websecurity.symantec.com/]

此处提供更多价格:https
//cheapsslsecurity.com/sslproducts/codesigningcertificate.html


另请参阅Erick Castrillo添加的链接:cheapsslsecurity.com/sslproducts/codesigningcertificate.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.