我们将使用AWS CloudHSM服务来确保所有代码签名证书的安全,并在构建服务器上执行代码签名。我们的构建服务器是Windows Server 2010,因此我在那里安装了AWS CloudHSM客户端。我激活了集群,所有命令行实用程序均按预期工作:我能够登录,添加密钥,查找密钥等。我们希望继续使用signtool对二进制文件进行签名,因此我认为我们可以使用密钥存储提供程序(KSP)适用于AWS CloudHSM,它与其他工具一起安装。
Cavium KSP和CNG提供程序已成功安装,并且在Windows加密提供程序的列表中可见。我按照此处(https://docs.aws.amazon.com/cloudhsm/latest/userguide/ksp-library-prereq.html)的定义定义了环境变量。
我通过certutil将证书添加到了HSM存储中:
Certutil -CSP "Cavium Key Storage Provider" -user -importPFX "certificate.pfx"
SDK Version: 2.03
Enter PFX password:
Certificate "myCertificate" added to store.
CertUtil: -importPFX command completed successfully.
证书已成功添加,并且在我从key_mgmt_util.exe控制台执行findKey命令时显示。
此后,我尝试使用https://docs.microsoft.com/en-us/windows-hardware/test/hlk/user/hlk-signing-with-an-hsm中所述的证书对二进制文件进行签名:
signtool_64 sign /n myCertificate "test.exe"
或
signtool sign /sha1 4F555EF9FAB8E86A2F84ACF325362A29FB64AF66 "test.exe"
但出现无法解决的错误
SDK Version: 2.03
Done Adding Additional Store
SignTool Error: An error occurred while attempting to load the signing
certificate from: C:\temp\test.exe
我还尝试指定密钥存储提供者和密钥容器
signtool sign /csp "Cavium Key Storage Provider" /k CARoot-877f51a1-90ee-4c10-8feb-02925caab4fb test.exe
回到我身边
SignTool Error: An unexpected internal error has occurred.
Error information: "Could not associate private key with certificate." (-2147024
891/0x80070005)
和
signtool sign /f certificate.pem /csp "Cavium Key Storage Provider"
/k CARoot-877f51a1-90ee-4c10-8feb-02925caab4fb test.exe
带有其他错误消息
SignTool Error: The specified private key does not match the public key of the selected certificate.
在我看来,存储中的证书有问题,但是我不知道如何解决此问题。 test.exe存在于磁盘上,可以使用signtool使用来自另一个提供程序的证书或指定pfx文件进行签名。
我在做什么错? Amazon CloudHSM客户端是否与signtool兼容,或者我该如何使用Amazon CloudHSM作为密钥存储在Windows上对二进制文件进行签名?
答案 0 :(得分:2)
我刚刚写了涵盖这种情况的文章Signing executables with Microsoft SignTool.exe using AWS CloudHSM-backed certificates。
总结:
您需要确保拥有CloudHSM的最新二进制文件。
检查在创建证书时(如果您自签名)是否在Windows中创建了相关的密钥容器。
如果您需要更多帮助,请一如既往地与AWS支持联系,或在AWS论坛中查看。
答案 1 :(得分:1)
我写信给AWS支持,他们回复:
“此问题似乎是由于尝试将证书存储在HSM上,并使用SignTool引用该证书引起的。尽管certutil命令显示“ CertUtil:-importPFX命令已成功完成。”,CloudHSM当前不支持证书。存储。但是会添加此功能,并在发布该功能时将其添加到版本历史记录页面。
您应该能够通过在本地引用证书( .crt / .cer)并使用存储在HSM上的证书的私钥来使用SignTool:
c:> signtool登录/ f certname.cer / csp“ Cavium Key Storage Provider” / k kontainer_name test.exe
但是这种方法对我而言也不起作用。所以我仍然在等待他们的帮助
答案 2 :(得分:0)
您尝试过
setx /m n3fips_partition <my hsm id>
setx n3fips_password=CU-username:CU-password
signtool sign /f /csp "Cavium Key Storage Provider" /k <container name> test.exe
我不知道容器名称应该是什么。通常,有一个工具可以在HSM分区和容器之间进行映射。
可以在她的https://docs.aws.amazon.com/cloudhsm/latest/userguide/ksp-library-prereq.html 中找到有关该主题的cloudhsm v2文档
https://docs.microsoft.com/en-us/windows/desktop/seccrypto/signtool
在注册表中搜索我找到的Cavium
Cavium CNG提供程序和Cavium密钥存储提供程序。也许您需要映射到ksp的cng?
此外,该项目的文档位于github上,文档编写者似乎是其中的贡献者 https://github.com/awsdocs/aws-cloudhsm-user-guide/blob/master/doc_source/ksp-library-install.md
您是否运行过csp ksp注册工具?