如果我在 Azure YAML 管道中使用它,以下任务将使用 DigiCert 签名管理器控制器 (smctl) 对安装程序进行签名,不会出现任何问题。
- task: CmdLine@2
displayName: 'Sign setup file'
inputs:
script:
smctl sign --verbose --keypair-alias=$(digicert-key-pair-alias) --certificate=$(Agent.TempDirectory)\KeyCert.pem --config-file $(SSMClientToolsSetup.PKCS11_CONFIG) --input $(System.ArtifactsDirectory)
env:
SM_HOST: $(CodeSigningHost)
SM_API_KEY: $(digicert-api-key)
SM_CLIENT_CERT_PASSWORD: $(digicert-cert-pw)
SM_CLIENT_CERT_FILE: $(caCertificate.secureFilePath)
在 Azure DevOps 发布管道中使用完全相同的任务不起作用:请参阅此屏幕截图:
我收到此错误:
Command :
signtool sign /tr http://timestamp.digicert.com /td SHA256 /fd SHA256 /csp "DigiCert Signing Manager KSP" /kc "***" /f "D:\a\_temp\KeyCert.pem" "D:\a\1\a\setup\ApplicationService_Setup_4.2.0.57.exe"
Error :
Done Adding Additional Store
Error information: "Error: SignerSign() failed." (-2146893779/0x8009002d)
exit status 1: SignTool Error: An unexpected internal error has occurred.
我在两个管道中调用相同的必要任务,如 DigiCert 说明 中所述。 DigiCert 工具已正确下载并安装在两个管道中。必要的证书和所有环境变量也在那里。
据我了解,签名过程应该适用于两种类型的管道。我在两个管道中调用相同的任务。两个管道都可以访问包含要签名的证书的安全文件和变量组,其中包含 DigiCert 工具使用的秘密参数。
我发现错误-2146893779/0x8009002d 意味着我的签名用完了。使用 keyLocker 配置方法签署证书带有固定数量的签名。 我希望 DigiCert 在他们的文档中提及这一点(s.SignTool 错误和解决方案),但事实并非如此。