Skip to main content

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

หลังจากการดำเนินการ:

  1. เขียน sslTrusKSP.dll ที่ฝังไว้ลงใน ProgramData/sslTrusKSP/sslTrusKSP.dll
  2. หากเวอร์ชัน DLL ใน ProgramData แตกต่างจากใน System32 ให้คัดลอก DLL ไปยัง System32
  3. ลงทะเบียน CNG Provider: sslTrus Key Storage Provider
  4. บันทึกไฟล์คอนฟิก KSP ProgramData/sslTrusKSP/config.dat (เข้ารหัสด้วย DPAPI)
หมายเหตุ

install จะแก้ไขการลงทะเบียน CNG Provider ระดับระบบ แนะนำให้รันในเทอร์มินัลผู้ดูแลระบบ หากตรวจพบว่าเวอร์ชัน DLL เหมือนกัน จะบันทึก ksp is already installed และส่งค่ากลับทันที


ถอนการติดตั้ง KSP​

signtool ksp uninstall

หลังจากดำเนินการแล้ว:

  1. ยกเลิกการลงทะเบียน CNG Provider: sslTrus Key Storage Provider
  2. ลบ ProgramData/sslTrusKSP/sslTrusKSP.dll
  3. ลบ sslTrusKSP.dll ใน System32
หมายเหตุ

uninstall จะไม่ลบไดเรกทอรี ProgramData/sslTrusKSP ทั้งหมด config.dat ไฟล์ใบรับรอง และบันทึกที่บันทึกไว้แล้ว จำเป็นต้องล้างด้วยตนเอง


ดูการกำหนดค่าคีย์​

signtool ksp list

คำอธิบายฟิลด์เอาต์พุต:

ฟิลด์ความหมาย
Noหมายเลขลำดับ
CertCodeหมายเลขใบรับรอง
ServerUrlแสดงเป็น nicsrs หรือ default
AccessKeyAccess Key
AccessSecretAccess 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

หลังจากดำเนินการ:

  1. เรียกใช้ /v1/codesign/cert ระยะไกลเพื่อรับ PEM ของใบรับรอง
  2. บันทึกใบรับรองเป็น ProgramData/sslTrusKSP/CERT_CODE.crt
  3. เขียนการกำหนดค่าคีย์ลงใน 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 และบันทึกภายในเครื่อง ควรปฏิบัติเหมือนข้อมูลละเอียดอ่อน ห้ามเขียนลงในบันทึกหรือคลังเวอร์ชัน