我有一个EXE文件,我想签名,这样Windows就不会警告终端用户来自“未知发行商”的应用程序。我不是Windows开发人员。所讨论的应用程序是由生成屏幕保护程序的应用程序生成的屏幕保护程序。因此,我对如何生成文件没有影响。
我已经发现我需要一个来自CA的代码签名证书,比如Verisign或instantssl.com。我不明白的是我需要做什么(如果可能的话)来签署我的EXE文件。一个简单的解释是什么?
Mel Green的回答让我更进一步,但signtool希望我指定在任何情况下使用什么证书。我能得到一个免费的代码签名证书来测试这是否对我有用吗?
另外,请指定哪种证书类型是正确的。大多数网站只提到“代码签名”,并谈论签名实际由用户编译的应用程序。对我来说不是这样。
我在工作中遇到过同样的情况,下面是我们的发现
你要做的第一件事是获得证书并将其安装到你的计算机上,你可以从证书颁发机构购买一个证书,也可以使用makecert生成一个证书。
以下是这两种选择的优缺点
购买证书
优点
使用CA(证书颁发机构)颁发的证书将
确保Windows不会就应用程序向最终用户发出警告
来自使用证书的任何计算机上的“未知发行者”
来自CA (OS通常与manny的根证书一起提供
CA的)
缺点:
从CA获得证书涉及成本
价格详见https://cheapsslsecurity.com/sslproducts/codesigningcertificate.html和https://www.digicert.com/code-signing/
使用Makecert生成证书
优点:
步骤很简单,您可以与最终用户共享证书
缺点:
最终用户将不得不手动在他们的机器上安装证书,根据您的客户端,这可能不是一个选项
使用makecert生成的证书通常用于开发和测试,而不是生产
签署可执行文件
有两种方式签名你想要的文件:
Using a certificate installed on the computer
signtool.exe sign /a /s MY /sha1 sha1_thumbprint_value /t http://timestamp.verisign.com/scripts/timstamp.dll /v "C:\filename.dll"
In this example we are using a certificate stored on the Personal folder with a SHA1 thumbprint (This thumbprint comes from the certificate) to sign the file located at C:\filename.dll
Using a certificate file
signtool sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /f "c:\path\to\mycert.pfx" /p pfxpassword "c:\path\to\file.exe"
In this example we are using the certificate c:\path\to\mycert.pfx with the password pfxpassword to sign the file c:\path\to\file.exe
测试你的签名
方法一:使用signtool工具
执行步骤:开始>运行
输入CMD >单击“确定”
在命令提示符下,输入存在signtool的目录
执行如下命令:
signtool.exe校验/pa /v "C:\文件名.dll"
方法二:使用Windows
右键单击签名文件
选择属性
选择“数字签名”选项卡。签名将显示在“签名列表”部分。
我希望这能帮助到你
来源:
https://learn.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/ms537361 (v = vs.85)
https://www.digicert.com/kb/code-signing/signcode-signtool-command-line.htm
https://learn.microsoft.com/en-us/windows/win32/seccrypto/makecert
https://cheapsslweb.com/comodo-code-signing