GitHub Action中用Digicert证书签名,smctl提示密钥对别名证书未找到
我在GitHub Action中尝试用Digicert证书做代码签名,参考相关GitHub Action配置后,使用smctl配合digicert/ssm-code-signing@v0.0.2 action执行,smctl能识别到密钥对,但其中CERTIFICATE列为空:
ID Key Modal TYPE ALIAS ALGORITHM & SIZE/CURVE STATUS TYPE STORAGE CERTIFICATE af658fe8-eb5b-40a2-927a-xyzxyzxyzxyz STATIC key_554917318 RSA - 3072 ONLINE PRODUCTION HSM
执行smctl windows certsync --keypair-alias="key_554917318"时提示:
$ smctl windows certsync --keypair-alias="key_554917318" Certificate for keypair alias: key_554917318 not found
执行smctl sign --verbose --keypair-alias=key_554917318 --input partitions.exe时提示:
$ smctl sign --verbose --keypair-alias=key_554917318 --input partitions.exe Command : signtool sign /tr http://timestamp.digicert.com /td SHA256 /fd SHA256 "my-app.exe" Error : exit status 1: SignTool Error: No certificates were found that met all the given criteria. signCommand command for file my-app.exe FAILED
请问哪里操作有误?为何smctl无法使用我的证书?是否需要在服务器端做调整?
排查与解决思路
密钥对未关联有效代码签名证书
smctl输出的CERTIFICATE列为空,直接说明该密钥对还未绑定对应的代码签名证书。Digicert SSM的密钥对必须关联已签发的、用途为代码签名的证书,才能用于签名操作。证书类型与权限验证
确认要关联的证书是代码签名专用证书(不能是SSL证书、文档签名证书等其他类型),同时你的SSM账号必须拥有该证书的访问权限。SignTool报错“没有符合条件的证书”,大多是因为证书用途不匹配,或者证书未与密钥对绑定。Digicert SSM控制台的必要操作
登录Digicert SSM后台完成以下步骤:- 找到别名
key_554917318对应的密钥对 - 为该密钥对关联已签发的代码签名证书;如果还没有对应证书,需要基于此密钥对提交代码签名证书申请并完成签发
- 确认证书状态为
ACTIVE,且证书算法与密钥对的RSA 3072匹配
- 找到别名
GitHub Action配置验证
检查action中传入的SSM凭证(如API密钥、租户ID等)是否对应正确的SSM租户,确保该凭证拥有操作目标密钥对和证书的权限。可以先在本地环境用相同凭证测试smctl命令,排除Action环境的配置问题。关于
certsync命令smctl windows certsync的作用是将SSM中的证书同步到本地Windows证书存储,但前提是密钥对已经关联了有效证书。当前这个命令报错,本质还是密钥对未绑定证书导致的,解决证书关联问题后再执行该命令即可。
内容的提问来源于stack exchange,提问作者Florian Loitsch

