signtool无法使用AWS CloudHSM中的密钥对二进制文件进行签名

时间:2018-07-26 12:53:36

标签: amazon-web-services certificate code-signing hsm signtool

我们将使用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上对二进制文件进行签名?

3 个答案:

答案 0 :(得分:2)

我刚刚写了涵盖这种情况的文章Signing executables with Microsoft SignTool.exe using AWS CloudHSM-backed certificates

总结:

  • 您需要确保拥有CloudHSM的最新二进制文件。

  • 检查在创建证书时(如果您自签名)是否在Windows中创建了相关的密钥容器。

  • 如果需要,请运行certutil -repairstore。
  • 使用SignTool时,请检查您是否指定了 证书哈希


如果您需要更多帮助,请一如既往地与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注册工具?