如何在使用代码签名时包含整个证书路径signtool?
较旧版本的signtool将在数字签名中包含整个证书路径.现在如果我签署一个可执行文件signtool:
signtool.exe" sign /v /f avatar.pfx -t "http://timestamp.verisign.com/scripts/timstamp.dll" app.exe
Run Code Online (Sandbox Code Playgroud)
签名无效:
这是因为没有认证路径:

使用旧版本的signtool签名的二进制文件工作正常:

如何在签名时告诉signcode包含整个认证路径?
签署二进制文件的正确方法是什么?
更新:SignTool版本6.1.7600.16385:

我需要使用company.pfx 中存储的证书对Application.exe 文件进行签名。所以,我使用了signtool:
signtool.exe sign /p password /f company.pfx /t http://timestamp.verisign.com/scripts/timestamp.dll /v Application.exe
The following certificate was selected:
Issued to: Company, Inc.
Issued by: Thawte Code Signing CA - G2
Expires: Wed Aug 27 02:59:59 2014
SHA1 hash: A2A0BD7C4516BF8C88AECC3A568CE9BB5D63902D
Done Adding Additional Store
Successfully signed and timestamped: App1_old.exe
Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0
Run Code Online (Sandbox Code Playgroud)
Signtool 说没有错误。但在数字签名详细信息中,有一条消息“无法验证签名中的证书”。并且没有认证路径。
在“详细信息”中,有一个属性“扩展错误信息”,表示“吊销状态:吊销功能无法检查吊销,因为吊销服务器已离线”。
为了调查这个问题,我在应用程序上使用了 sigcheck(-a key),它显示“已验证:无法为受信任的根颁发机构构建证书链。”
然后我将 pfx 文件导入存储库,看起来证书没问题。
我在 stackoverflow 上搜索了有关我的主题的信息,找到了一些链接,它很有帮助。 …
我正在尝试设置IIS 8(Windows Server 2012)以接受安全WebAPI端点的客户端证书.在这篇文章之后,我创建了一个自签名证书和一个客户证书:
makecert.exe -r -n "CN=MyCompany" -pe -sv MyCompany.pvk -a sha1 -len 2048 -cy authority MyCompany.cer
makecert.exe -iv MyCompany.pvk -ic MyCompany.cer -n "CN=MY Client" -pe -sv MyClient.pvk -a sha1 -len 2048 -sky exchange MyClient.cer -eku 1.3.6.1.5.5.7.3.2
pvk2pfx.exe -pvk MyClient.pvk -spc MyClient.cer -pfx MyClient.pfx -po THE_PASSWORD
Run Code Online (Sandbox Code Playgroud)
我在IIS服务器上安装了根证书MyCompany.cer,然后在IIS管理器/ SSL设置上我选择了"接受"单选按钮以允许网站接受客户端证书.
在客户端a有一个C#测试控制台应用程序,它加载客户端证书MyClient.pfx文件并调用WebAPI端点:
var certHandler = new WebRequestHandler();
certHandler.ClientCertificateOptions = ClientCertificateOption.Manual;
certHandler.UseProxy = false;
var certificate = new X509Certificate2(File.ReadAllBytes(@"C:\MyClient.pfx"), "THE_PASSWORD");
certHandler.ClientCertificates.Add(certificate);
var client = new HttpClient(certHandler);
var result = client.GetAsync("https://MyServer/api/MyEndpoint").Result;
string …Run Code Online (Sandbox Code Playgroud)