签署Windows EXE文件

时间:2008-10-31 00:17:15

标签: windows certificate exe sign

我有一个EXE文件,我想签名,以便Windows不会向最终用户发出有关“未知发布者”的应用程序的警告。我不是Windows开发人员。有问题的应用程序是从生成屏幕保护程序应用程序的应用程序生成的屏幕保护程序。因此,我对文件的生成方式没有影响。

我已经发现我需要来自code signing CA或instantssl.com的Verisign证书。我不明白的是我需要做什么(如果可能的话)签署我的EXE文件。什么是简单的解释?

Mel Green的回答让我更进一步,但是signtool要我指定在任何情况下使用哪种证书。我可以以某种方式获得免费的代码签名证书,以测试这对我是否有用吗?

另请注明哪种证书类型是正确的。大多数网站只提到“代码签名”,并谈论签署用户实际编译的应用程序。对我来说情况并非如此。

9 个答案:

答案 0 :(得分:99)

您可以尝试使用Microsoft's Sign Tool

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

  

signtool sign / a MyFile.exe

使用可用的“最佳证书”签署单个可执行文件。 (如果您没有证书,则会显示SignTool错误消息。)

或者您可以尝试:

  

signtool signwizard

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


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

Certificate Creation Tool (Makecert.exe)

创建自己的证书并使用它来签署可执行文件后,您需要手动将其添加为计算机的受信任的根CA,以便UAC告诉用户运行它它来自可靠的来源。 重要即可。 Installing a certificate as ROOT CA will endanger your users privacy. Look what happened with DELL. 您可以在代码和Windows中找到有关完成此操作的更多信息:

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

答案 1 :(得分:25)

如果您正在进行开源开发,可以获得免费廉价代码签名证书from 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

答案 2 :(得分:17)

ASP的杂志ASPects详细描述了如何签署代码(你必须成为阅读文章的成员)。您可以通过http://www.asp-shareware.org/

下载

以下是如何make your own test certificate的说明链接。

This也可能很有趣。

答案 3 :(得分:14)

我的工作中有相同的情况,这是我们的发现

您要做的第一件事是获取证书并将其安装到您的计算机上,您可以从证书颁发机构购买一个或使用 makecert 即可。

以下是2个选项的优缺点

购买证书

  • 优点
    • 使用由CA(证书颁发机构)颁发的证书 确保Windows不会警告最终用户有关应用程序的信息 来自使用证书的任何计算机上的“未知发布者” 来自CA(OS通常附带来自manny的根证书 CA's)
  • 缺点:
    • 从CA
    • 获取证书需要付费

使用Makecert生成证书

  • 优点:
    • 步骤很简单,您可以与最终用户共享证书
  • 缺点:
    • 最终用户必须在他们的计算机上手动安装证书,具体取决于您的客户可能不是一个选项
    • 使用makecert生成的证书通常用于开发和测试,而不是生产

签署可执行文件

有两种方法可以对文件进行签名:

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

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

    • 在此示例中,我们使用存储在Personal文件夹中的证书和SHA1指纹(此指纹来自证书)来签署位于“C:\ filename.dll”的文件
  • 使用证书文件

    signtool sign / 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

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

我希望这可以帮到你

来源:

答案 4 :(得分:9)

另一个选择是,如果您需要在Linux机器上签署可执行文件,请使用Mono project tools中的 signcode 。它是supported on Ubuntu

答案 5 :(得分:4)

参考https://steward-fu.github.io/website/driver/wdm/self_sign.htm 注意:Microsoft SDK中的signtool.exe

1.第一次(制作私人证书)

Makecert -r -pe -ss YourName YourName.cer

certmgr.exe -add YourName.cer -s -r localMachine root

2.(将您的标志添加到您的应用中)

signtool sign / s YourName YourApp.exe

答案 6 :(得分:3)

另一种选择是,如果你在Windows 10上开发但没有安装微软的signtool.exe,你可以在Windows上的Ubuntu上使用Bash来签署你的应用。这是一个故障:

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

答案 7 :(得分:2)

使用以下链接签署.exe(安装程序/安装程序)文件(不使用Microsoft setup signtool签署exe / setup文件)

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

示例命令java -jar jsign-2.0.jar --keystore keystore.jks“--alias alias --storepass password MyInstaller.exe

为我工作:)

答案 8 :(得分:1)

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

因此,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