ฉันมีระบบ windows สองระบบที่เชื่อมโยงกับ AWS CloudHSM v2 (cavium HSM) ประการหนึ่ง ฉันสร้าง CSR และยอมรับ/เพิ่มใบรับรองที่ซื้อด้วย CSR นั้น ฉันสามารถลงชื่อและดึงคีย์ส่วนตัวจาก HSM ผ่าน Key Container ได้อย่างถูกต้อง

การลงนามอื่นคือระบบการลงนามในการผลิตของฉัน และทำงานได้อย่างถูกต้องกับใบรับรองที่มีอยู่ แต่เมื่อฉันพยายามเพิ่มใบรับรองใหม่ ไม่มี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 คั่นระหว่าง the =กับ&the 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 ที่ จำกัด )

answer

ตกลง นี่คือคำตอบจากฝ่ายสนับสนุนของ 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>

สิ่งนี้ควรส่งออกสิ่งที่คล้ายกับ: "แสดง 1 คู่คีย์ใน Cavium Key Storage Provider"

หากคุณได้รับข้อความแสดงข้อผิดพลาด "n3fips_password is not set" อย่าลืมตั้งค่าข้อมูลรับรองการเข้าสู่ระบบสำหรับ HSM ในระบบของคุณตามรายละเอียดใน [4] ด้านล่าง

  1. เรียกใช้คำสั่งต่อไปนี้เพื่อตรวจสอบว่าคอนเทนเนอร์คีย์ใหม่อยู่ในผู้ให้บริการพื้นที่เก็บข้อมูลคีย์ของคุณ:
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. ตรวจสอบให้แน่ใจว่า daemon ไคลเอ็นต์ 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เพื่อบังคับให้ใช้ที่เก็บเครื่องและไม่ใช่ที่จัดเก็บของผู้ใช้ เนื่องจากกระบวนการข้างต้นจะสร้างคอนเทนเนอร์ที่เชื่อมโยงกับที่เก็บเครื่อง ไม่มีทางเลือกในเรื่องนี้