CA/B论坛新代码签名规则对UWP CI/CD签名流程的影响及实操咨询
UWP应用USB硬件密钥签名解决方案
我们有一个UWP应用,此前在CI/CD流水线机器上使用本地安装的Digicert OV证书进行签名,原PowerShell命令如下:
.\signtool.exe sign /fd sha256 /t http://timestamp.digicert.com /n "935B2960-B127-4AAC-8CEF-12B537I6737D" "C:\Users\%username%\source\myrepo\MyUwpTestApp\MyUwpTestApp\AppPackages\MyUwpTestApp_1.0.1.0_Debug_Test\MyUwpTestApp_1.0.1.0_x64_Debug.msixbundle"
由于CA/B论坛2023年6月1日新规,代码签名密钥需存储在经FIPS 140 Level 2、Common Criteria EAL 4+或同等认证的硬件安全模块/令牌中,现针对相关问题给出具体解决方案:
1. 如何通过PowerShell命令借助USB硬件密钥完成二进制文件签名?
- 先确认USB硬件密钥已连接到CI/CD机器,并安装好对应厂商的驱动(比如Digicert硬件密钥驱动)。
- 硬件密钥的证书通常会存入本地机器的"个人"存储区,可先执行以下命令确认证书存在:
.\signtool.exe find /sm /n "935B2960-B127-4AAC-8CEF-12B537I6737D" - 调整签名命令,使用硬件存储的证书完成签名,示例命令如下:
.\signtool.exe sign /fd sha256 /t http://timestamp.digicert.com /sm /n "935B2960-B127-4AAC-8CEF-12B537I6737D" "C:\Users\%username%\source\myrepo\MyUwpTestApp\MyUwpTestApp\AppPackages\MyUwpTestApp_1.0.1.0_Debug_Test\MyUwpTestApp_1.0.1.0_x64_Debug.msixbundle" - 若硬件密钥有指定的加密服务提供程序(CSP),可添加
/csp参数明确指定,比如Digicert硬件对应的CSP:.\signtool.exe sign /fd sha256 /t http://timestamp.digicert.com /csp "DigiCert Hardware Security Module" /k "密钥容器名" "目标文件路径"
2. 是否需要在PowerShell命令中添加参数以强制使用硬件密钥?
- 需要。默认情况下signtool会优先查找本地安装的软件证书,需通过以下参数锁定硬件密钥:
/sm:指定从本地机器存储区查找证书(硬件密钥的证书通常存于此,而非当前用户存储)/csp:明确指定硬件密钥对应的加密服务提供程序,确保signtool调用硬件模块而非软件密钥/k:若硬件密钥有唯一的密钥容器名,用此参数指定容器名,进一步精准定位硬件密钥
3. 能否避免签名过程中的人工交互,保持CI/CD流水线的独立性?
- 可以,需完成以下配置:
- 为硬件密钥设置无PIN码,或通过厂商工具配置自动PIN输入(部分硬件支持将PIN存储在机器安全存储中,需确认厂商支持)
- 确保CI/CD流水线的服务账户有权限访问硬件密钥的加密服务提供程序,可在本地安全策略中为该账户添加硬件密钥的读取权限
- 在签名命令中添加
/q参数开启静默模式,避免弹出交互窗口:.\signtool.exe sign /q /fd sha256 /t http://timestamp.digicert.com /sm /n "935B2960-B127-4AAC-8CEF-12B537I6737D" "目标文件路径" - 若硬件密钥强制要求PIN,可使用厂商提供的命令行工具预先注入PIN,或通过PowerShell脚本调用厂商SDK传入PIN,实现非交互签名
内容的提问来源于stack exchange,提问作者Fernando
相关产品推荐
相关产品推荐

