该问题实际上包含正确的程序——使用包含根证书、中间证书、开发人员证书和私钥的 PFX 文件进行签名。另外,使用时间戳服务器。我的问题是我的 PFX 中包含错误的根证书,因此用于签名的证书无法链接回根。
根据要求,这里是有关如何创建 PFX 文件的信息。我在下面使用的 cert2spc 和 pvk2pfx 也在平台 SDK 中。
cert2spc certpath1.cer certpath2.cer certpath3.cer codesign.spc
其中 .cer 文件列表包括根证书、中间证书和代码签名证书,而 codesign.spc 是输出文件。然后:
pvk2pfx -pvk privkey.pvk -spc codesign.spc
以这种方式运行 pvk2pfx 会启动一个向导,提示输入私钥密码、输出文件的位置和输出文件的密码。
最后,signtool 进行实际的代码签名:
signtool sign /f my_certificates.pfx /p my_passphrase /t http://timestamp.verisign.com/scripts/timstamp.dll my_activex_control.ocx
回想起来,我可能通过使用直接使用 .spc 和 .pvk 文件的 signcode.exe 又名代码签名向导(我认为它是 .NET SDK 的一部分)节省了时间。