我有一个EXE文件,我想签名,这样Windows就不会警告终端用户来自“未知发行商”的应用程序。我不是Windows开发人员。所讨论的应用程序是由生成屏幕保护程序的应用程序生成的屏幕保护程序。因此,我对如何生成文件没有影响。

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

Mel Green的回答让我更进一步,但signtool希望我指定在任何情况下使用什么证书。我能得到一个免费的代码签名证书来测试这是否对我有用吗?

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


当前回答

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

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

AboutSSL 240美元/年(标题党价格) $287/年(实际价格,优惠券后)

KSoftware.net 1年$350 +($50隐藏费用!) 2年600美元 3年750美元

OV:每年84元(为期3年)

我从他们那里买了一辆电动汽车。几年后,我买了一台OV。eToken是通过u盘发送的。不需要阅读。他们只是中介。最后,你实际上是从Comodo (Sectigo)购买。 Sectigo非常慢。 第二次核查花了整整两个月。多次验证失败。一切都很麻烦。技术支持人员不知道发生了什么,可能只是一个在巴基斯坦的家伙在看一些脚本。

Sklep.certum.pl 1年379欧元 (似乎只对波兰用户开放)

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

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

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

Digicert.com 一年:600美元(原价104美元) 3年:?

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

更多价格: 合作设计电动汽车 仅SSL !


电动汽车与显微值

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

有些人建议向微软提交与OV签署的程序,以便用他们的防病毒软件进行检查。


如果你发现更便宜的价格,让我知道,我会更新清单!


如何使用证书?

为了对exe文件进行签名,我使用了MS signtool.exe。为此,你需要下载庞大的微软Windows SDK,其容量高达1GB。幸运的是,您不必安装它。只需打开ISO并提取“Windows SDK Signing Tools-x86_en-us.msi”。它只有400 KB。

然后我创建了这个小脚本文件:

prompt $
echo off
cls

copy "my.exe" "my.bak.exe"

"c:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64\signtool.exe" sign /fd SHA256 /f MyCertificate.pfx /p MyPassword My.exe

pause 

__

签署EXE文件后发生了什么?

所以,在投资了一些钱之后,我终于签署了我的EXE文件。之后发生了什么?没有什么……在Win10上,我仍然看到同样的“不受信任”窗口和“不要运行”按钮。“继续”按钮仍然不可见。我的程序每天大约有400次下载。让我们拭目以待到底需要多少下载量。

其他回答

参考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 -添加你的名字。cer -s -r localroot

2.之后(添加你的签名到你的应用程序)

signtool sign /s YourName YourApp.exe

如何为你的应用程序签名

使用微软的SignTool为你的应用签名。

你下载它作为Windows SDK的一部分。注意,也可以在不安装整个SDK的情况下安装SignTool。安装完成后,你可以从命令行使用SignTool,如下所示:

signtool sign /a /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 MyFile.exe

这将签署MyFile.exe。使用的命令行选项说明:

/a will automatically use the certificate that is valid for the longest time. If you have no certificate, SignTool will display an error. /fd SHA256 will use the SHA-256 digest algorithm for the file signature. Using SHA256 is recommended and considered to be more secure than the default SHA1 digest algorithm. /tr http://timestamp.digicert.com adds a timestamp to your signed apps. This is extremely important because this will allow the signature to remain valid even after the certificate itself has already expired. The argument for the /tr option is a timestamp URL. You can use any of the timestamp URL's from this list of free RFC 3161 timestamp servers. /td SHA256 will use the SHA-256 digest algorithm for the timestamp signature. As before, using SHA256 is recommended and considered to be more secure.

如何以及何时使用自签名证书

如果您希望获得一个证书,可以使用它来测试对可执行文件进行签名的过程,那么可以使用MakeCert来创建一个自签名证书。

一旦您创建了自己的证书并使用它对可执行文件进行签名,您需要手动将其添加为机器的可信根CA,以便UAC接受您的自签名证书作为可信源。请注意,您只能在自己的开发机器上执行此操作。通常不能在用户的计算机上这样做,因为大多数用户出于充分的理由不接受安装新的根CA。

如何摆脱“未识别的应用程序”警告

即使你的应用程序是签名的,当你试图运行应用程序时,你仍然可能会看到以下警告消息:

Microsoft Defender SmartScreen阻止无法识别的应用程序 开始。运行这个应用程序可能会使你的电脑处于危险之中。

如何避免这个警告是一个有点复杂的话题。请看这个答案,了解微软智能屏幕警告的全貌,以及你可以做什么,应该知道什么。

ASP的杂志ASPects有关于如何签署代码的详细描述(你必须是会员才能阅读文章)。你可以通过http://www.asp-shareware.org/下载

这里有一个链接,说明如何制作自己的测试证书。

这可能也很有趣。

还有一种选择,如果你是在Windows 10上开发,但没有安装微软的signtool.exe,你可以在Windows上的Ubuntu上使用Bash来为你的应用签名。

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

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