244

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

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

梅尔格林的回答让我走得更远,但 signtool 希望我指定在任何情况下都使用什么证书。我可以以某种方式获得免费的代码签名证书来测试这是否对我有用吗?

另请指定哪种证书类型是正确的。大多数网站只提到“代码签名”,并谈论对用户实际编译的应用程序进行签名。这不是我的情况。

4

9 回答 9

141

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

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

signtool sign /a MyFile.exe

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

或者您可以尝试:

标志工具标志向导

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


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

证书创建工具 (Makecert.exe)

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

希望这可以为任何尝试这样做的人提供更多信息!

于 2008-10-31T00:32:58.743 回答
71

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

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

这是2个选项的优缺点

购买证书

使用 Makecert 生成证书

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

签署可执行文件

有两种方法可以对您想要的文件进行签名:

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

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

测试您的签名

  • 方法一:使用signtool

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

    signtool.exe verify /pa /v "C:\filename.dll"

  • 方法 2:使用 Windows

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

我希望这可以帮助你

资料来源:

于 2018-04-06T15:41:27.227 回答
41

如果您正在进行开源开发,您可以 从 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
于 2014-09-18T21:24:37.300 回答
18

The ASP's magazine ASPects has a detailed description on how to sign code (You have to be a member to read the article). You can download it through http://www.asp-shareware.org/

Here's link to a description how you can make your own test certificate.

This might also be interesting.

于 2008-11-27T13:03:40.673 回答
18

如果您需要在 Linux 机器上签署可执行文件,另一种选择是使用Mono 项目工具中的signcode。它在 Ubuntu 上受支持

于 2015-02-21T07:03:49.023 回答
12

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

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

Makecert -r -pe -ss YourName YourName.cer

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

2.After(将您的标志添加到您的应用程序)

signtool sign /s YourName YourApp.exe

于 2018-02-08T10:26:34.503 回答
12

这不是对这个问题的直接回答,但它是密切相关的(我希望是有用的),因为迟早任何个人程序员都会把手伸进钱包。

因此,EV(扩展验证)代码签名证书的价格,按价格排序:

关于SSL
$240/年(点击诱饵价格)
$287/年(实际价格,优惠券后)

KSoftware.net
1 年 350 美元 +(50 美元隐藏费用!)
2 年 600 美元
3 年 750 美元
(OV:每年 84 美元)
我从他们那里购买的。eToken 是通过 U 盘发送的。无需阅读器。他们只是中介。最后,您实际上是从 Comodo (Sectigo) 购买的。他们非常缓慢(可能是因为中间人)!

Sklep.certum.pl
1 年 379 欧元
(似乎仅适用于波兰用户)

LeaderSsl.de
1 年 364 欧元或 307 欧元 (+19%VAT)
(OV 69+VAT)

Sectigo.com
1 年 499 美元
3 年 897 美元

GlobalSign.com
1 年总计 410 美元
2 年总计 760
美元 3 年总计 950 美元

Digicert.com
1 年:600 美元(原为 104 美元)
3 年:?

symantec.com
1 年:700 美元
3 年:贵得离谱

更多价格:
cheapsslsecurity.com CodeSigning EV
Cheapsslsecurity.com 仅限 SSL!


EV 与 OV

使用 EV,还需要 9 个额外步骤,包括验证企业的公共电话号码、营业时间、注册号和管辖权,以及域名欺诈检查、联系人黑名单检查和电话呼叫以验证企业的就业状态请求者。

有些人建议将使用 OV 签名的程序提交给 Microsoft,以使用他们的防病毒软件进行检查。


如果您发现更便宜的价格,请告诉我,我会更新列表!

于 2019-10-25T13:29:57.123 回答
7

还有另一种选择,如果你在 Windows 10 上开发但没有安装 Microsoft 的 signtool.exe,你可以在 Windows 上使用 Bash on Ubuntu 来签署你的应用程序。这是一个失败:

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

于 2017-06-16T11:24:54.590 回答
7

使用以下链接对 .exe(安装程序/安装程序)文件进行签名(在不使用 Microsoft 安装程序签名工具的情况下签署 exe/安装程序文件)

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

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

为我工作:)

于 2018-03-28T04:43:40.117 回答