【问题标题】:signtool fails to sign a binary with a key from a AWS CloudHSMsigntool 无法使用来自 AWS CloudHSM 的密钥对二进制文件进行签名
【发布时间】:2019-01-03 11:30:01
【问题描述】:

我们将使用 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 存在于磁盘上,可以使用来自其他提供商的证书或在指定 pfx 文件时使用 signtool 进行签名。

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

【问题讨论】:

  • 嗨@toohtik,你在这方面有什么进展吗?我也想使用 Cloud HSM 提供商来签署二进制文件,但我没有看到任何报告表明它确实有效。
  • 嗨@DaveJ 看看我的答案,谢谢
  • 感谢@toohtik 花时间更新。如果有的话,您能否发布进一步的更新。再次感谢,非常感谢。

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


【解决方案1】:

我写信给 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】:

    你试过了吗

    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://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 注册工具?

    【讨论】:

    • 嗨@Eva Brigit,感谢您的回复。我检查了:提供者已注册并且对于 certutil 和 signtool 都是可见的。分区和用户:密码已设置并在命令行中可见。当我通过 certutil -importpfx 命令将证书添加到存储时,导入的密钥(私有和公共)出现在 HSM 中。我通过 key_mgmt_util.exe 导出它们并且它们是有效的。我还指定了从“certutil -store my”输出中获取的密钥容器,但结果是一样的。我用详细信息更新了我的原始帖子。谢谢
    • 我在尝试将自签名证书从一台机器移动到另一台机器时遇到问题。我正在尝试验证 Cavium 是否适用于 Hardware Lab 套件。似乎有些东西将 CER 与 HSM 联系起来,但我不知道那是什么,但我猜它存在于注册表中。
    【解决方案3】:

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

    总结一下:

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

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

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


    如果您需要进一步的帮助,请一如既往地联系 AWS Support 或查看 AWS 论坛。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-04
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 2011-05-06
      • 1970-01-01
      相关资源
      最近更新 更多