我已经发现,我需要从Verisign或instantssl.com等CA获得代码签名证书。我不明白的是,我需要做什么(如果可能的话)来签署我的EXE文件。简单的解释是什么?
Mel Green的回答让我更进一步,但signtool在任何情况下都希望我指定要使用的证书。我可以获得免费的代码签名证书来测试是否适用于我吗?
另外,请指定正确的证书类型。大多数网站只提到“代码签名”,并谈论由用户实际编译的应用程序的签名。这对我不适用。
使用Microsoft SignTool为您的应用程序签名。
您可以在Windows SDK中下载它。请注意,也可以仅安装SignTool而无需安装整个SDK。安装后,您可以像这样从命令行使用SignTool:
signtool sign /a /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 MyFile.exe
这将会签署 MyFile.exe
。以下是使用的命令行选项的解释:
/a
将自动使用最长时间内有效的证书,如果没有证书,SignTool 将显示一个错误。/fd SHA256
将使用 SHA-256 摘要算法进行文件签名。建议使用 SHA256,因为它比默认的 SHA1 摘要算法更安全。/tr http://timestamp.digicert.com
为您的签名应用程序添加时间戳。这非常重要,因为这将使签名保持有效,即使证书本身已经过期。 /tr
选项的参数是时间戳 URL。您可以使用此免费 RFC 3161 时间戳服务器列表中的任何时间戳 URL。/td SHA256
将使用 SHA-256 摘要算法进行时间戳签名。与之前一样,建议使用 SHA256,因为它更加安全。如果您想获得一个证书来测试您签署可执行文件的过程,您可以使用MakeCert创建一个自签名证书。
一旦您创建了自己的证书并用它来签署您的可执行文件,您需要手动将其添加为 Trusted Root CA,并使 UAC 接受您的自签名证书作为可信来源。请注意,您通常只能在自己的开发机器上执行此操作。您通常无法在用户计算机上这样做,因为大多数用户不会接受安装新的根证书出于良好的理由。
即使您的应用已经签名,尝试运行该应用时,您可能仍然会看到以下警告消息:
Microsoft Defender SmartScreen 阻止了未识别的应用程序,以免运行此应用程序会使您的 PC 处于风险之中。
如何避免此警告是一个相当复杂的问题。请参阅此答案,了解有关这些 Microsoft SmartScreen 警告的全貌以及您可以做什么和应该了解什么。
我在工作中遇到了同样的情况,以下是我们的发现:
首先,你需要获得证书并将其安装在电脑上。你可以从证书颁发机构(CA)购买一个证书或使用makecert生成一个证书。
以下是两种选择的优缺点:
购买证书
使用makecert生成证书
签名可执行文件
有两种方式可以签名你想要的文件:
使用计算机上安装的证书
signtool.exe sign /a /s MY /sha1 sha1_thumbprint_value /t http://timestamp.verisign.com/scripts/timstamp.dll /v "C:\filename.dll"
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"
pfxpassword
的证书c:\path\to\mycert.pfx
来签名文件c:\path\to\file.exe
测试您的签名
方法1:使用signtool
转到:开始 > 运行
键入CMD
>单击确定
在命令提示符下,进入signtool
存在的目录
运行以下命令:
signtool.exe verify /pa /v "C:\filename.dll"
方法2:使用Windows
右键单击已签名的文件
选择属性
选择数码签名选项卡。签名将显示在签名列表部分。
希望本文能够帮助到您。
来源:
如果您从事开源开发,可以从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
这不是对问题的直接回答,但它与之密切相关(而且我希望它有用),因为早晚任何个人程序员都会掏钱购买证书。
所以,按价格排序列出了EV(扩展验证)代码签名证书的价格:
AboutSSL
240美元/年(点击诱导性价格)
287美元/年(优惠券后的实际价格)
KSoftware.net
1年350美元 + (50美元隐藏费用!)
2年600美元
3年750美元
OV:84美元每年(3年期)
我从他们那里购买了一个EV。几年后我又购买了一个OV。eToken被发送到一个USB驱动器上,不需要读卡器。他们只是中介。最终,您实际上是从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
1年:600美元(曾经是104美元)
3年:?
symantec.com
1年:700美元
3年:荒谬昂贵
更多价格在此处:
cheapsslsecurity.com CodeSigning EV
cheapsslsecurity.com SSL only!
EV vs OV
使用EV需要进行九个额外步骤,包括验证企业的公共电话号码、经营时间、注册号和管辖地,以及进行域欺诈检查、联系人黑名单检查和打电话验证请求者的就业状况。
所以,花了一些钱之后,我终于签署了我的EXE文件。之后会发生什么呢? 没有任何变化...在Win10上我仍然看到同样的“不受信任”窗口,并且“不要运行”按钮。 “继续”按钮仍然是不可见的。我的程序每天大约有400次下载。让我们等待并观察需要多少次下载。
ASP的杂志ASPECTS详细描述了如何签署代码(您必须是会员才能阅读文章)。 您可以通过http://www.asp-shareware.org/下载。
这里有一个描述如何制作自己的测试证书的链接。
这个链接也可能很有趣。
如果您需要在Linux机器上对可执行文件进行签名,另一个选择是使用Mono项目工具中的signcode。它在Ubuntu上得到支持。
参考 https://steward-fu.github.io/website/driver/wdm/self_sign.htm
注意:来自微软 SDK 的 signtool.exe
第一次(制作私有证书)
Makecert -r -pe -ss YourName YourName.cer
certmgr.exe -add YourName.cer -s -r localMachine root
之后(将您的签名添加到应用程序中)
signtool sign /s YourName YourApp.exe
https://ebourg.github.io/jsign/#files
示例命令:
jsign --keystore keystore.jks --alias alias --storepass password MyInstaller.exe
对我有用 :)
如果你在Windows 10上进行开发,但没有安装微软的signtool.exe,那么你可以使用Bash on Ubuntu on Windows来签名你的应用程序。以下是操作步骤:
https://blog.synapp.nz/2017/06/16/code-signing-a-windows-application-on-linux-on-windows/
osslsigncode
也可在 cygwin
下使用,因此如果您已经在使用它(就像我一样),那么您可以在当前环境中签名,而无需切换到 WSL。 - thoni56