我们将使用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存储中:
证书已成功添加,并且当我执行key_mgmt_util.exe控制台中的findKey命令时,它会出现。
之后,我尝试使用证书签署二进制文件,如https://learn.microsoft.com/en-us/windows-hardware/test/hlk/user/hlk-signing-with-an-hsm中所述:
但是我得到了一个无法解决的错误。
我也尝试指定密钥存储提供程序和密钥容器。
似乎存储中的证书存在问题,但我不知道如何修复。test.exe 存在于磁盘上,可以使用来自另一个提供商的证书或指定 pfx 文件进行签名。
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 作为密钥存储来签名二进制文件?