Windows

添加與 Cavium (AWS CloudHSMv2) 相關的證書時,Windows 不會創建分配“密鑰容器”

  • January 28, 2022

我有兩個 Windows 系統與 AWS CloudHSM v2(cavium HSM)相關聯。一方面,我生成了 CSR,並接受/添加了使用該 CSR 購買的證書。我可以簽名並通過密鑰容器從 HSM 正確提取私鑰。

另一個簽名是我的生產簽名系統,它與現有證書一起正常工作,但是當我嘗試添加新證書時,沒有Key Container設置。我習慣於需要執行修復過程,但在這種情況下,我沒有提供文件的 ID。

  1. 認證"\Program Files\Amazon\CloudHSM\tools\set_cloudhsm_credentials.exe" --user REDACTED --password "..."
  2. 添加證書certutil -addstore my my-new-cert.crt
  3. 轉儲商店詳細資訊certutil -store my > cert_store_details.txt
   Serial Number: REDACTED
   Issuer: CN=DigiCert Trusted G4 Code Signing RSA4096 SHA384 2021 CA1, O=DigiCert, Inc., C=US
    NotBefore: 1/25/2022 12:00 AM
    NotAfter: 1/25/2023 11:59 PM
   Subject: CN=REDACTED, C=US, SERIALNUMBER=REDACTED, OID.1.3.6.1.4.1.311.60.2.1.2=Delaware, OID.1.3.6.1.4.1.311.60.2.1.3=US, OID.2.5.4.15=Private Organization
   Non-root Certificate
   Cert Hash(sha1): REDACTED
   No key provider information
   Cannot find the certificate and private key for decryption.

通常,我會創建一個 repair.txt 像這樣在和之間使用Key Containerid但是,我沒有其中一個,所以我不走運=``&``Container

       [Properties]
       11 = "" ; Add friendly name property
       2 = "{text}" ; Add Key Provider Information property
       _continue_="Container=&"
       _continue_="Provider=Cavium Key Storage Provider&"
       _continue_="Flags=0&"
       _continue_="KeySpec=2"    

如果我只是進行維修certutil -repairstore my "REDACTED",那麼我會被要求提供智能卡。哦,這台機器是 Windows Core 2016(所以沒有 UI 或有限的 UI)。

好的,這是來自 AWS 支持的答案 - 希望他們會將其添加到他們的文件中

  1. 確定私鑰和公鑰的 CloudHSM 文件句柄(您可以通過從證書中轉儲模數並使用 hsm 工具尋找密鑰來完成此操作。但是,我在生成 CSR 之前和之後報告了句柄,因此我可以添加它們到我的安全文件 - 所以我不需要這樣做
  2. 創建 KSP 容器
C:\Program Files\Amazon\CloudHSM>import_key.exe -from HSM 
 -privateKeyHandle <private key handle> -publicKeyHandle <public key handle>

這應該輸出類似於:“Represented 1 keypairs in Cavium Key Storage Provider”。

如果您收到錯誤消息“n3fips_password is not set”,請確保在您的系統上設置 HSM 的登錄憑據,詳見

$$ 4 $$以下。 3. 執行以下命令以驗證新的密鑰容器是否在您的密鑰儲存提供程序中:

C:\Program Files\Amazon\CloudHSM>certutil -key -csp "Cavium Key Storage provider"

“Cavius Key Storage Provider”可能不是您的密鑰容器的名稱。此名稱是從第一步生成的輸出中檢索的。

如果容器創建成功,輸出應該類似於以下內容:

Cavium Key Storage provider:
 <key container name>
 RSA


CertUtil: -key command completed successfully.
  1. 創建一個 repair.txt 以便我們可以更新證書儲存以使用容器
[Properties]
11 = "" ; Add friendly name property
2 = "{text}" ; Add Key Provider Information property
_continue_="Container=<key container name>&"
_continue_="Provider=Cavium Key Storage Provider&"
_continue_="Flags=0&"
_continue_="KeySpec=2"
  1. 確保 CloudHSM 客戶端守護程序仍在執行,並使用certutil verb -repairstore更新證書序列號。該命令看起來類似於以下內容:
certutil -repairstore my <certificate serial number> repair.txt
  1. 修復證書儲存後,請執行以下命令驗證證書是否已成功與新密鑰容器正確關聯:
certutil -store my

你會期待這樣的事情

================ Certificate 0 ================
Serial Number: <certificate serial number>
Issuer: CN=MYRootCA
NotBefore: 2/5/2020 1:38 PM
NotAfter: 2/5/2021 1:48 PM
Subject: CN=www.mydomain.com, OU=Certificate Management, O=Information Technology, L=Houston, S=Texas, C=US
Non-root Certificate
Cert Hash(sha1): 5a...24
 Key Container = CNGRSAPriv-...d
 Provider = Cavium Key Storage Provider
Private key is NOT exportable
Encryption test passed
CertUtil: -store command completed successfully.

如果Key Container = CNGRSAPriv-...d顯示正確的容器,則您知道證書 KSP 關係良好

如果您看到Private key is NOT exportable並且Encryption test passed知道您正在使用正確的文件句柄。

如果您使用 signtool,則需要添加/sm以強制它使用機器儲存而不是使用者儲存,因為上述過程會生成與機器儲存綁定的容器。沒有選擇。

引用自:https://serverfault.com/questions/1091363