将 Microsoft SignTool 与 AWS CloudHSM 结合使用来对文件签名 - AWS CloudHSM

将 Microsoft SignTool 与 AWS CloudHSM 结合使用来对文件签名

在加密和公有密钥基础结构 (PKI) 中,数字签名用于确认数据已由可信实体发送。签名还表明数据在传输过程中未被篡改。签名是使用发送方的私有密钥生成的加密哈希。接收方可以通过使用发送方的公有密钥解密其哈希签名来验证数据的完整性。反过来,发送方有责任维护数字证书。数字证书显示发送方对私有密钥的所有权,并向接收方提供解密所需的公有密钥。只要私有密钥由发送方拥有,签名就可以信任。AWS CloudHSM 提供安全的 FIPS 140-2 3 级验证硬件,您可以通过独占的单租户访问来保护这些密钥。

许多组织使用 Microsoft SignTool,这是一种命令行工具,用于对文件进行签名、验证和添加时间戳,简化代码签名过程。您可以使用 AWS CloudHSM 安全地存储您的密钥对,直到 SignTool 需要它们,从而创建一个易于自动化的工作流程以对数据进行签名。

以下主题概述如何将 SignTool 与 AWS CloudHSM 结合使用。

步骤 1:设置先决条件

要将 Microsoft SignTool 与 AWS CloudHSM 结合使用,您需要:

  • 一个运行 Windows 操作系统的 Amazon EC2 客户端实例。

  • 一个证书颁发机构 (CA),自我维护或由第三方提供商建立。

  • 与 EC2 实例相同的虚拟公有云 (VPC) 中的活动 AWS CloudHSM 集群。该集群必须包含至少一个 HSM。

  • 拥有和管理 AWS CloudHSM 集群中的密钥的加密用户 (CU)。

  • 未签名文件或可执行文件。

  • Microsoft Windows 软件开发工具包 (SDK)。

设置将 AWS CloudHSM 与 Windows SignTool 结合使用的先决条件
  1. 按照本指南的入门部分中的说明进行操作,启用 Windows EC2 实例和 AWS CloudHSM 集群。

  2. 如果您想托管自己的 Windows Server CA,请执行使用 AWS CloudHSM 将 Windows Server 配置为证书颁发机构中的步骤 1 和 2。否则,请继续使用您的公开可信的第三方 CA。

  3. 在 Windows EC2 实例上下载并安装下列版本的 Microsoft Windows 开发工具包之一:

    SignTool 可执行文件是 Windows SDK Signing Tools for Desktop Apps 安装功能的一部分。您可以省略要安装的其他功能(如果您不需要它们)。默认安装位置是:

    C:\Program Files (x86)\Windows Kits\<SDK version>\bin\<version number>\<CPU architecture>\signtool.exe

您现在可以使用 Microsoft Windows 开发工具包、AWS CloudHSM 集群和 CA 来创建签名证书

步骤 2:创建签名请求

现在您已将 Windows 开发工具包下载到 EC2 实例,您可以使用它来生成证书签名请求 (CSR)。CSR 是未签名的证书,该证书最终将传递给您的 CA 进行签名。在此示例中,我们使用 Windows 开发工具包中包含的 certreq 可执行文件来生成 CSR。

使用 certreq 可执行文件生成 CSR
  1. 如果您尚未完成此操作,请连接到您的 Windows EC2 实例。有关详细信息,请参阅《Amazon EC2 用户指南》中的连接到您的实例

  2. 创建一个名为 request.inf 的文件,其中包含下列行。将 Subject 信息替换为该组织的相应信息。有关每个参数的说明,请参阅 Microsoft 的文档

    [Version] Signature= $Windows NT$ [NewRequest] Subject = "C=<Country>,CN=<www.website.com>,O=<Organization>,OU=<Organizational-Unit>,L=<City>,S=<State>" RequestType=PKCS10 HashAlgorithm = SHA256 KeyAlgorithm = RSA KeyLength = 2048 ProviderName = Cavium Key Storage Provider KeyUsage = "CERT_DIGITAL_SIGNATURE_KEY_USAGE" MachineKeySet = True Exportable = False
  3. 运行 certreq.exe。在此示例中,我们将 CSR 保存为 request.csr

    certreq.exe -new request.inf request.csr

    在内部,在 AWS CloudHSM 集群上生成新的密钥对,并使用该密钥对的私有密钥创建 CSR。

  4. 将 CSR 提交给 CA。如果您使用的是 Windows Server CA,请执行以下步骤:

    1. 输入以下命令以打开 CA 工具:

      certsrv.msc
    2. 在新窗口中,右键单击 CA 服务器的名称。选择所有任务,然后选择提交新请求

    3. 导航到 request.csr 的位置,然后选择打开

    4. 展开服务器 CA 菜单,导航至待处理请求文件夹。右键单击您刚刚创建的请求,并在所有任务下,选择 Issue (发布)。

    5. 现在,导航到颁发的证书文件夹(位于待处理请求文件夹上)。

    6. 选择打开以查看证书,然后选择详细信息选项卡。

    7. 选择复制到文件以启动证书导出向导。将经 DER 编码的 X.509 文件作为 signedCertificate.cer 保存到安全位置。

    8. 退出 CA 工具并使用以下命令,该命令将证书文件移动到 Windows 中的个人证书存储。然后,它可由其他应用程序使用。

      certreq.exe -accept signedCertificate.cer

现在,您可以使用导入的证书来签署文件

步骤 3:对文件进行签名

您现在可以使用 SignTool 和导入的证书对示例文件进行签名。为此,您需要知道证书的 SHA-1 哈希或指纹。可使用指纹来确保 SignTool 仅使用由 AWS CloudHSM 验证的证书。在此示例中,我们使用 PowerShell 获取证书的哈希。您还可以使用 CA 的 GUI 或 Windows 开发工具包的 certutil 可执行文件。

获取证书的指纹并使用它来对文件进行签名
  1. 以管理员身份打开 PowerShell 并运行以下命令:

    Get-ChildItem -path cert:\LocalMachine\My

    复制返回的 Thumbprint

    证书的哈希将作为指纹返回
  2. 导航到 PowerShell 中包含 SignTool.exe 的目录。默认位置是 C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64

  3. 最后,通过运行以下命令来对文件签名。如果命令成功,则 PowerShell 将返回成功消息。

    signtool.exe sign /v /fd sha256 /sha1 <thumbprint> /sm C:\Users\Administrator\Desktop\<test>.ps1
    已对 .ps1 文件成功签名。
  4. (可选)要验证文件上的签名,请使用以下命令:

    signtool.exe verify /v /pa C:\Users\Administrator\Desktop\<test>.ps1