使用来自AWS CloudHSM的密钥签名二进制文件时,signtool无法签名。

5
我们将使用AWS CloudHSM服务来保护所有代码签名证书并在构建服务器上执行代码签名。我们的构建服务器是Windows Server 2010,因此我在那里安装了AWS CloudHSM客户端。我激活了集群,所有命令行工具都按预期工作:我能够登录、添加密钥、查找密钥等。我们希望继续使用signtool来签署我们的二进制文件,因此我认为我们可以使用与其他工具一起安装的AWS CloudHSM的密钥存储提供程序(KSPs)。
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://learn.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 存在于磁盘上,可以使用来自另一个提供商的证书或指定 pfx 文件进行签名。

我做错了什么?Amazon CloudHSM 客户端是否与 signtool 兼容,或者我该如何在 Windows 上使用 Amazon CloudHSM 作为密钥存储来签名二进制文件?


嗨@toohtik,你在这方面有什么进展吗?我也想使用Cloud HSM提供商来签署二进制文件,但我没有看到任何实际起作用的报告。 - DaveJ
嗨@DaveJ,请看一下我的回答,谢谢。 - toohtik
感谢@toohtik抽出时间进行更新。如果有进一步的更新,请您能否发布一下。再次感谢,非常感激。 - DaveJ
3个回答

2
我写信给AWS支持团队,他们回复说:
“这个问题似乎是由于尝试将证书存储在HSM上,并使用SignTool引用证书所导致的。虽然certutil命令显示“CertUtil:-importPFX命令成功完成”,但CloudHSM目前不支持证书存储。这个功能将会被添加,当发布时将会被添加到版本历史页面。
你应该能够通过引用本地证书(.crt/.cer),并使用存储在HSM上的证书的私钥来使用SignTool:
c:> signtool sign /f certname.cer /csp "Cavium Key Storage Provider" /k kontainer_name test.exe 但这种方法在我的环境中也不起作用。所以我仍在等待他们的帮助。”

2
我刚刚写了一篇文章使用AWS CloudHSM支持的证书使用Microsoft SignTool.exe签署可执行文件 ,涵盖了这种情况。
总结一下:
  • 您需要确保拥有CloudHSM的最新二进制文件。

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

  • 如有必要,请运行certutil -repairstore。

  • 使用SignTool时,请检查您指定了证书HASH。


如果您需要进一步的帮助,请像往常一样联系AWS支持,或者查看AWS论坛。

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 分区和容器之间进行映射。

关于这个主题的 cloudhsm v2 文档可以在这里找到 https://docs.aws.amazon.com/cloudhsm/latest/userguide/ksp-library-prereq.html

https://learn.microsoft.com/en-us/windows/desktop/seccrypto/signtool

在注册表中搜索Cavium时,我发现

Cavium CNG提供程序和Cavium密钥存储提供程序。也许您需要将cng映射到ksp?

此外,该项目的文档位于github上,文档编写者似乎是贡献者 https://github.com/awsdocs/aws-cloudhsm-user-guide/blob/master/doc_source/ksp-library-install.md

您是否运行了csp ksp注册工具?


嗨,@Eva Brigit,感谢您的回复。我检查了:提供程序在certutil和signtool两个工具中均已注册且可见。分区和用户名密码已设置并在命令行中可见。当我通过certutil -importpfx命令将证书添加到存储时,导入的私钥和公钥将出现在HSM中。我通过key_mgmt_util.exe导出它们,并且它们是有效的。我还指定了从“certutil -store my”输出中获得的密钥容器,但结果仍然相同。我已更新原帖并附上详细信息。谢谢。 - toohtik
当我尝试将自签名证书从一台机器移动到另一台时,出现了问题。我正在尝试验证 Cavium 是否能与硬件实验室套件配合使用。似乎有某些东西将CER与HSM链接在一起,但我不知道是什么,不过我猜它存储在注册表中。 - Eva Brigid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接