signtool ksp และการผสานรวมกับ Windows KSP
signtool ksp จัดการ Windows sslTrus Key Storage Provider (KSP) หลังจากการติดตั้งและกำหนดค่า KSP เสร็จสมบูรณ์ Microsoft signtool.exe สามารถเรียกใช้บริการลงนามระยะไกลผ่าน CNG Provider ได้โดยไม่ต้องเก็บคีย์ส่วนตัวไว้ในเครื่อง
คำสั่งย่อยทั้งหมดของ signtool ksp รองรับเฉพาะแพลตฟอร์ม Windows เท่านั้น หากเรียกใช้คำสั่งย่อยใดๆ ของ ksp บนแพลตฟอร์มที่ไม่ใช่ Windows จะได้รับข้อความดังนี้:
key storage provider is only supported on windows
ภาพรวมคำสั่งย่อย
signtool ksp [command]
| คำสั่งย่อย | วัตถุประสงค์ |
|---|---|
install | ติดตั้งและลงทะเบียน KSP DLL |
uninstall | ยกเลิกการลงทะเบียน KSP และลบ DLL |
list | แสดงรายการการกำหนดค่าคีย์ KSP ที่บันทึกไว้ |
add | เพิ่มการกำหนดค่าคีย์ KSP (แบบโต้ตอบ) |
del | ลบการกำหนดค่าคีย์ KSP ที่ระบุ (แบบโต้ตอบ) |
พารามิเตอร์ --address มีผลเฉพาะเมื่อ ksp add เท่านั้น ใช้สำหรับรับ PEM ของใบรับรองและบันทึกที่อยู่บริการระยะไกล
ติดตั้ง KSP
signtool ksp install
หลังการดำเนินการ:
- เขียน
sslTrusKSP.dllที่ฝังอยู่ลงในProgramData/sslTrusKSP/sslTrusKSP.dll - หากเวอร์ชัน DLL ใน ProgramData แตกต่างจากใน System32 ให้คัดลอก DLL ไปยัง System32
- ลงทะเบียน CNG Provider:
sslTrus Key Storage Provider - บันทึกไฟล์คอนฟิก KSP
ProgramData/sslTrusKSP/config.dat(เข้ารหัสด้วย DPAPI)
install จะแก้ไขการลงทะเบียน CNG Provider ระดับระบบ แนะนำให้ดำเนินการในเทอร์มินัลผู้ดูแลระบบ หากตรวจพบว่าเวอร์ชัน DLL เหมือนกัน จะบันทึก ksp is already installed และส่งค่ากลับทันที
ถอนการติดตั้ง KSP
signtool ksp uninstall
หลังจากการดำเนินการ:
- ยกเลิกการลงทะเบียน CNG Provider:
sslTrus Key Storage Provider - ลบ
ProgramData/sslTrusKSP/sslTrusKSP.dll - ลบ
sslTrusKSP.dllใน System32
uninstall จะไม่ลบไดเรกทอรี ProgramData/sslTrusKSP ทั้งหมด config.dat ไฟล์ใบรับรอง และบันทึกที่บันทึกไว้ต้องทำความสะอาดด้วยตนเอง
ดูการกำหนดค่าคีย์
signtool ksp list
คำอธิบายฟิลด์เอาต์พุต:
| ฟิลด์ | ความหมาย |
|---|---|
No | หมายเลขลำดับ |
CertCode | หมายเลขใบรับรอง |
ServerUrl | แสดงเป็น nicsrs หรือ default |
AccessKey | Access Key |
AccessSecret | Access Secret ที่ผ่านการปกปิดข้อมูลบางส่วน |
- หากไม่มีไฟล์คอนฟิก ให้คืนค่า
no ksp configuration
- หากมีการกำหนดค่าแต่รายการคีย์ว่างเปล่า ให้บันทึก
no ksp key AccessSecretแสดงผลโดยปกปิดข้อมูล แต่ไฟล์กำหนดค่าเองยังต้องจัดการเป็นไฟล์ข้อมูลอ่อนไหว :::
เพิ่มการกำหนดค่าคีย์
signtool ksp add
ระบุที่อยู่ NICSRS:
signtool ksp add --address nicsrs
คำสั่งเป็นแบบโต้ตอบ ให้ป้อนตามลำดับ:
Please enter the access key: your-access-key
Please enter the access secret: your-access-secret
Please enter the certificate code: CERT_CODE
หลังจากการดำเนินการ:
- เรียก
/v1/codesign/certระยะไกลเพื่อดึง PEM ของใบรับรอง - บันทึกใบรับรองเป็น
ProgramData/sslTrusKSP/CERT_CODE.crt - เขียนการกำหนดค่าคีย์ลงใน
ProgramData/sslTrusKSP/config.dat(เข้ารหัสด้วย DPAPI)
หากหมายเลขใบรับรองมีอยู่แล้ว ระบบจะแจ้งเตือน:
The certificate code already exists, do you want to override it? [y/N]
พิมพ์ y เพื่อเขียนทับ ค่าอื่นหรือกด Enter โดยตรงจะเป็นการยกเลิก
ksp add เป็นคำสั่งแบบโต้ตอบ ปัจจุบันไม่รองรับพารามิเตอร์แบบไม่โต้ตอบ เช่น --access-key, --cert-code การเพิ่มการกำหนดค่าจะเรียกใช้ API ระยะไกล และเขียนใบรับรอง PEM ลงใน ProgramData ภายในเครื่อง
ลบการกำหนดค่าคีย์
signtool ksp del
ป้อนหมายเลขใบรับรองแบบโต้ตอบ:
Please enter the certificate code: CERT_CODE
หลังจากดำเนินการแล้ว ให้ลบการกำหนดค่าคีย์ที่ตรงกันออกจาก config.dat และบันทึกไฟล์การกำหนดค่าที่เข้ารหัสอีกครั้ง
การใช้งานปัจจุบันจะลบเฉพาะรายการกำหนดค่าเท่านั้น ไม่ลบไฟล์ใบรับรอง ProgramData/sslTrusKSP/CERT_CODE.crt
ใช้ Microsoft signtool.exe ผ่าน KSP
หลังจากกำหนดค่า KSP เสร็จแล้ว ให้ใช้ signtool.exe ของ Microsoft ใน Windows SDK เพื่อเรียกใช้ Provider
signtool.exe ในคำสั่งต่อไปนี้คือ เครื่องมือที่มาพร้อมกับ Microsoft Windows SDK ไม่ใช่ sslTrus CLI หากทั้งสองมีอยู่ในไดเรกทอรีปัจจุบันหรือ PATH พร้อมกัน โปรดใช้พาธแบบเต็มของ signtool.exe ใน Windows SDK เพื่อหลีกเลี่ยงความสับสน
ตัวอย่างการลงนาม SHA256:
signtool.exe sign /v ^
/csp "sslTrus Key Storage Provider" ^
/kc CERT_CODE ^
/f C:\ProgramData\sslTrusKSP\CERT_CODE.crt ^
/fd SHA256 ^
/tr http://timestamp.acs.microsoft.com ^
/td SHA256 ^
.\EXAMPLE.exe
ตัวอย่างการเพิ่มลายเซ็น SHA1:
signtool.exe sign /v ^
/csp "sslTrus Key Storage Provider" ^
/kc CERT_CODE ^
/f C:\ProgramData\sslTrusKSP\CERT_CODE.crt ^
/fd SHA1 ^
/tr http://timestamp.acs.microsoft.com ^
/td SHA256 ^
/as ^
.\EXAMPLE.exe
คำอธิบายพารามิเตอร์:
| พารามิเตอร์ | ความหมาย |
|---|---|
/csp "sslTrus Key Storage Provider" | ระบุ KSP Provider ที่ติดตั้งโดย sslTrus |
/kc CERT_CODE | ระบุชื่อคีย์ KSP ซึ่งกำหนดเป็นหมายเลขใบรับรอง |
/f C:\ProgramData\sslTrusKSP\CERT_CODE.crt | ระบุไฟล์ใบรับรองที่บันทึกโดย ksp add |
/fd SHA256 หรือ /fd SHA1 | อัลกอริทึม摘要ไฟล์ |
/tr <url> | บริการประทับเวลา RFC3161 |
/td SHA256 | อัลกอริทึม摘要ของการประทับเวลา |
/as | ผนวกลายเซ็น โดยไม่เขียนทับลายเซ็นที่มีอยู่ |
ข้อมูลอ้างอิงสำหรับการแก้ไขปัญหา
| ข้อความข้อผิดพลาด | สาเหตุที่เป็นไปได้ | คำแนะนำในการแก้ไข |
|---|---|---|
key storage provider is only supported on windows | มีการรันคำสั่ง ksp บนแพลตฟอร์มที่ไม่ใช่ Windows | ดำเนินการ KSP เฉพาะบน Windows เท่านั้น |
no ksp configuration | ยังไม่ได้สร้างไฟล์คอนฟิก KSP | รัน signtool ksp install และ signtool ksp add ก่อน |
no such certificate code | หมายเลขใบรับรองที่ต้องการลบไม่มีอยู่ | ใช้ signtool ksp list เพื่อยืนยันหมายเลขใบรับรอง |
ข้อควรระวังด้านความปลอดภัย
signtool ksp installและsigntool ksp uninstallจะแก้ไขไดเรกทอรีระบบ Windows และรีจิสทรี CNG Provider ซึ่งโดยปกติต้องใช้สิทธิ์ผู้ดูแลระบบsigntool ksp addจะเข้าถึงอินเทอร์เฟซใบรับรองระยะไกล และเขียนไฟล์ใบรับรองและการกำหนดค่าการเข้ารหัสลงในProgramData/sslTrusKSP- Access Secret ไฟล์กำหนดค่า KSP และบันทึกภายในเครื่อง ควรปฏิบัติเหมือนข้อมูลละเอียดอ่อน ไม่ควรเขียนลงในบันทึกหรือคลังเวอร์ชัน