YubiHSM 代码签名导出证书

YubiHSM Code-signing exporting certificate

我按照教程使用可用的 YubiHSM 密钥存储提供程序生成代码签名证书 here。在使用 certreq -new sign.inf sign.req 创建证书签名请求(CSR)后,在 YubiHSM 中创建了一个新的非对称密钥,以及该密钥与 YubiHSM 密钥存储提供程序(KSP)中的证书之间的关联。之后,我可以使用 signtool sign /sha1 <certificate hash> <binary name>.

之类的方式对我的二进制文件进行签名

但是,当我导出此证书并将其导入另一台计算机时,该证书没有关联的私钥。输入 certutil -repairstore my <certificate hash> 没有帮助。据我了解,KSP 仅将 link 存储到 YubiHSM,而不是实际的私钥本身。所以我想我需要以某种方式在 KSP 中创建此关联。

我终于设法解决了如下问题: 安装和配置 YubiHSM KSP 后,安装导出的证书。安装证书后检查其有效性:

certutil -verifystore my <certificate hash>

如果您仍然看不到已安装的证书,请尝试使用以下方法手动添加它:

certutil -addstore -f "My" "MyCertificate.cer"

找到导入的证书后,您需要手动将证书绑定到私钥。这是因为密钥未与证书一起存储,并且 Windows 不会自动在两者之间创建关联。

certutil -repairstore my <certificate hash>

现在您应该能够使用 certutil -verifystore 命令在 Key Container 字段中看到正确的密钥标签。

之后您应该可以开始使用 signtool 对您的二进制文件进行签名。但是,我必须添加 /sm 标志才能使其工作。

signtool sign /sm /a /n "<CertificateName>" /fd sha256 path-to-binary-to-sign.exe