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 และบันทึกภายในเครื่อง ควรปฏิบัติเหมือนข้อมูลละเอียดอ่อน ห้ามเขียนลงในบันทึกหรือคลังเวอร์ชัน