Windows Provider
sslTrus มีวิธีการผสานรวม Windows Provider สองแบบ ได้แก่ KSP (Key Storage Provider) และ CSP (Cryptographic Service Provider)
ด้วย Windows Provider จะทำให้ Microsoft SignTool, Visual Studio, MSBuild, เครื่องมือสร้างแพ็กเกจติดตั้ง รวมถึงซอฟต์แวร์อื่น ๆ ที่รองรับอินเทอร์เฟซการเข้ารหัสของ Windows สามารถใช้ความสามารถการลงนามโค้ดบนคลาวด์ของ sslTrus ได้
คีย์ส่วนตัวสำหรับการลงนามจะถูกเก็บไว้ใน HSM บนคลาวด์ตลอดเวลา โดยไม่จำเป็นต้องติดตั้งไฟล์คีย์ส่วนตัวลงในเครื่องคอมพิวเตอร์ภายใน
การติดตั้ง กำหนดค่า และบำรุงรักษา KSP และ CSP ดำเนินการผ่าน sslTrus SignTool CLI ซึ่งสามารถดาวน์โหลดได้จาก หน้าปล่อยไคลเอนต์ sslTrus
KSP กับ CSP
KSP และ CSP สอดคล้องกับอินเทอร์เฟซการเข้ารหัสสองรุ่นของ Windows ตามลำดับ:
| Provider | อินเทอร์เฟซ Windows | สถานการณ์ที่เหมาะสม |
|---|---|---|
| KSP | CNG (Cryptography API: Next Generation) | แอปพลิเคชันและเครื่องมือลงนาม Windows สมัยใหม่ ควรเลือกใช้เป็นอันดับแรก |
| CSP | CryptoAPI | แอปพลิเคชันดั้งเดิมหรือซอฟต์แวร์ที่ระบุอย่างชัดเจนว่าต้องใช้ CSP |
สำหรับสถานการณ์ผสานรวม Windows ใหม่ โดยทั่วไปควรเลือกใช้ KSP เป็นอันดับแรก
เฉพาะเมื่อซอฟต์แวร์เป้าหมายไม่รองรับ KSP หรือระบุอย่างชัดเจนว่าต้องใช้ CryptoAPI Provider แบบดั้งเดิม จึงค่อยใช้ CSP
KSP
KSP คือ Key Storage Provider ที่อิงตาม Windows CNG
หลังจากติดตั้ง sslTrus KSP แล้ว แอปพลิเคชัน Windows ที่รองรับ CNG จะสามารถเรียกใช้บริการลงนามโค้ดระยะไกลผ่านอินเทอร์เฟซคีย์มาตรฐานของ Windows ได้
Provider ภายในเครื่องมีหน้าที่รับคำขอลงนามที่แอปพลิเคชันส่งมา และส่งไดเจสต์ที่ต้องลงนามไปยังบริการลงนามโค้ดระยะไกล การดำเนินการกับคีย์ส่วนตัวจริงจะเสร็จสิ้นใน HSM บนคลาวด์
สถานการณ์ที่เหมาะสม
KSP เหมาะสำหรับ:
- Microsoft SignTool
- Visual Studio
- MSBuild
- ซอฟต์แวร์สร้างและลงนามที่รองรับ Windows CNG
- แอปพลิเคชันที่ต้องเชื่อมต่อคีย์ส่วนตัวระยะไกลผ่าน Windows Provider มาตรฐาน
การติดตั้ง KSP
ดำเนินการในเทอร์มินัลผู้ดูแลระบบ:
signtool ksp install
คำสั่งนี้จะติดตั้งและลงทะเบียน:
sslTrus Key Storage Provider
การติดตั้ง KSP เกี่ยวข้องกับการลงทะเบียน Provider ของระบบและไดเรกทอรีระบบ Windows ดังนั้นโดยทั่วไปจึงต้องใช้สิทธิ์ผู้ดูแลระบบ
เพิ่มการกำหนดค่าใบรับรอง
ดำเนินการ:
signtool ksp add
ตามข้อความแจ้ง ให้ป้อนข้อมูล:
Access Key
Access Secret
Certificate Code
ไคลเอนต์จะดึงใบรับรองที่เกี่ยวข้องจากบริการลงนามโค้ดระยะไกล และบันทึกที่อยู่บริการระยะไกล ข้อมูลประจำตัวสำหรับการเข้าถึง และการกำหนดค่าใบรับรอง
หากใช้สภาพแวดล้อม NICSRS (www.nicsrs.com) จำเป็นต้องเพิ่ม --address nicsrs:
signtool ksp add --address nicsrs
ลงทะเบียนใบรับรอง
หลังจากกำหนดค่า KSP เสร็จสิ้น จำเป็นต้องลงทะเบียนใบรับรองการลงนามโค้ดไปยังคลังใบรับรองของ Windows และเชื่อมโยงกับ KSP Provider
ดำเนินการ:
signtool ksp register
默认ลงทะเบียนไปยังคลังใบรับรองส่วนบุคคลของผู้ใช้ปัจจุบัน
หากต้องการลงทะเบียนไปยังคลังใบรับรอง LocalMachine:
signtool ksp register --store local-machine
หลังจากการลงทะเบียนเสร็จสมบูรณ์ Windows จะรู้จักใบรับรองที่เกี่ยวข้องว่ามีคีย์ส่วนตัวที่ใช้งานได้ แต่คีย์ส่วนตัวจริงยังคงถูกเก็บไว้ใน HSM บนคลาวด์
การใช้ Microsoft SignTool
หลังจากการกำหนดค่า KSP เสร็จสิ้น คุณสามารถใช้ Microsoft signtool.exe ที่มีให้ใน Windows SDK เพื่อลงนามไฟล์ได้
ตัวอย่างเช่น:
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 ^
".\app.exe"
พารามิเตอร์หลัก:
| พารามิเตอร์ | คำอธิบาย |
|---|---|
/csp | ระบุ sslTrus KSP Provider |
/kc | ระบุคีย์คอนเทนเนอร์ที่สอดคล้องกับหมายเลขใบรับรอง |
/f | ระบุใบรับรองการลงนามโค้ด |
/fd | ระบุอัลกอริทึมการย่อไฟล์ |
/tr | ระบุเซิร์ฟเวอร์ประทับเวลา RFC 3161 |
/td | ระบุอัลกอริทึมการย่อของการประทับเวลา |
หากต้องการเพิ่มลายเซ็น SHA-1 ต่อจากลายเซ็นที่มีอยู่แล้ว สามารถใช้พารามิเตอร์ /as ได้:
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 ^
".\app.exe"
Microsoft signtool.exe จะเรียกใช้ sslTrus KSP ผ่าน Windows CNG จากนั้น KSP จะดำเนินการลงนามด้วยคีย์ส่วนตัวระยะไกล
จัดการ KSP
ดู KSP ที่กำหนดค่าไว้แล้ว:
signtool ksp list
ลบการกำหนดค่า:
signtool ksp del
ยกเลิกการเชื่อมโยงระหว่างใบรับรองกับ KSP:
signtool ksp deregister
ถอนการติดตั้ง KSP:
signtool ksp uninstall
ก่อนถอนการติดตั้ง Provider ควรตรวจสอบให้แน่ใจว่าไม่มีแอปพลิเคชัน Windows อื่นใดที่ยังคงพึ่งพา Provider นั้นอยู่
CSP
CSP คือ Cryptographic Service Provider ที่ใช้โดย Windows CryptoAPI แบบดั้งเดิม
ส่วนใหญ่ใช้ในกระบวนการลงนามบน Windows ที่ต้องระบุ Provider และคีย์คอนเทนเนอร์ผ่านพารามิเตอร์ /csp และ /kc sslTrus CSP ได้รับการติดตั้งและดูแลรักษาโดยฝั่งไคลเอ็นต์ ส่วนการลงนามไฟล์จริงยังคงดำเนินการโดย Microsoft signtool.exe ของ Windows SDK
สถานการณ์ที่เหมาะสม
CSP เหมาะสำหรับ:
- ซอฟต์แวร์ Windows ที่รองรับเฉพาะ CryptoAPI แบบดั้งเดิม
- เครื่องมือลงนามที่ระบุ CSP Provider อย่างชัดเจน
- สภาพแวดล้อมที่ต้องลงนามโดยใช้พารามิเตอร์
/cspและ/kcของ Microsoft SignTool - แอปพลิเคชันรุ่นเก่าที่ไม่สามารถใช้ Windows CNG / KSP ได้
สำหรับระบบใหม่ที่สามารถใช้ KSP ได้ตามปกติ โดยทั่วไปไม่จำเป็นต้องใช้ CSP เพิ่มเติม
การติดตั้ง CSP
ดำเนินการในเทอร์มินัลผู้ดูแลระบบ:
signtool csp install
ระหว่างการติดตั้งจะมีการลงทะเบียน:
sslTrus Cryptographic Service Provider
และติดตั้ง Provider DLL ลงในระบบ Windows
ประเภทของ CSP Provider คือ:
PROV_RSA_AES
การกำหนดค่าท้องถิ่นจะถูกบันทึกไว้ที่ตำแหน่งเริ่มต้น:
%ProgramData%\sslTrusKSP
ไฟล์กำหนดค่าได้รับการป้องกันด้วย Windows DPAPI
หากต้องการติดตั้ง KSP พร้อมกัน สามารถรันคำสั่ง:
signtool csp install --with-ksp
เพิ่มการกำหนดค่าใบรับรอง
ดำเนินการ:
signtool csp add
ตามคำแนะนำให้ป้อน:
Access Key
Access Secret
Certificate Code
เมื่อเพิ่มเสร็จสมบูรณ์ ไคลเอนต์จะดาวน์โหลดใบรับรองที่เกี่ยวข้องและบันทึกไปที่:
%ProgramData%\sslTrusKSP\CERT_CODE.crt
โดยที่ CERT_CODE ทำหน้าที่เป็นทั้งตัวระบุใบรับรองระยะไกลและชื่อคีย์คอนเทนเนอร์ที่ใช้โดย Microsoft SignTool ในภายหลัง
หากใช้สภาพแวดล้อม NICSRS (www.nicsrs.com) จำเป็นต้องเพิ่ม --address nicsrs:
signtool csp add --address nicsrs
การลงทะเบียนใบรับรอง
ตามค่าเริ่มต้น ใบรับรองจะถูกลงทะเบียนไปยังคลังใบรับรองส่วนบุคคลของผู้ใช้ปัจจุบัน:
signtool csp register
หากจำเป็นต้องลงทะเบียนไปยัง LocalMachine:
signtool csp register --store local-machine
คลังใบรับรองที่รองรับมีดังนี้:
| พารามิเตอร์ | Windows Certificate Store |
|---|---|
current-user | CurrentUser\My |
local-machine | LocalMachine\My |
หลังจากการลงทะเบียนเสร็จสิ้น Windows Certificate Manager จะแสดงว่าใบรับรองที่เกี่ยวข้องมีความสัมพันธ์กับคีย์ส่วนตัว แต่คีย์ส่วนตัวยังคงอยู่ที่ HSM บนคลาวด์
การใช้ Microsoft SignTool
เมื่อทำการลงนามด้วย CSP จำเป็นต้องระบุ Provider, คีย์คอนเทนเนอร์ และไฟล์ใบรับรองอย่างชัดเจน:
signtool.exe sign /v ^
/csp "sslTrus Cryptographic Service Provider" ^
/kc CERT_CODE ^
/f "C:\ProgramData\sslTrusKSP\CERT_CODE.crt" ^
/fd SHA256 ^
/tr http://timestamp.acs.microsoft.com ^
/td SHA256 ^
".\app.exe"
พารามิเตอร์หลัก:
| พารามิเตอร์ | คำอธิบาย |
|---|---|
/csp | ระบุ sslTrus CSP Provider |
/kc | ระบุคีย์คอนเทนเนอร์ที่สอดคล้องกับหมายเลขใบรับรอง |
/f | ระบุใบรับรองการลงนามโค้ด |
/fd | ระบุอัลกอริทึมการย่อไฟล์ |
/tr | ระบุเซิร์ฟเวอร์ประทับเวลา RFC 3161 |
/td | ระบุอัลกอริทึมการย่อสำหรับการประทับเวลา |
sslTrus CSP รองรับอัลกอริทึมการย่อ SHA1, SHA256, SHA384 และ SHA512 สำหรับสถานการณ์การลงนามใหม่ โดยทั่วไปควรใช้อัลกอริทึม SHA-256 หรือระดับความแข็งแกร่งที่สูงกว่า
ตรวจสอบลายเซ็น
หลังจากลงนามเสร็จสิ้น สามารถใช้ Microsoft SignTool เพื่อตรวจสอบได้:
signtool.exe verify /pa /v ".\app.exe"
การตรวจสอบลายเซ็นจะไม่เรียกใช้คีย์ส่วนตัวระยะไกลอีกครั้ง และจะไม่สร้างจำนวนการเซ็นชื่อใหม่
จัดการ CSP
ดูการกำหนดค่าที่มีอยู่:
signtool csp list
ลบการกำหนดค่าใบรับรองบางรายการ:
signtool csp del
ยกเลิกการเชื่อมโยงคีย์ส่วนตัวระหว่างใบรับรองกับ CSP:
signtool csp deregister
ถอนการติดตั้ง Provider:
signtool csp uninstall
删除การกำหนดค่า CSP จะไม่ลบไฟล์ใบรับรองที่ดาวน์โหลดไว้แล้วโดยอัตโนมัติ หากใบรับรองและการกำหนดค่าที่เกี่ยวข้องไม่ใช้งานแล้ว ควรยืนยันว่าไม่มี Provider อื่นที่พึ่งพาก่อนจึงค่อยทำความสะอาด
KSP หรือ CSP
หากไม่มีความต้องการความเข้ากันได้พิเศษ สามารถเลือกได้ตามตารางต่อไปนี้:
| สถานการณ์ | คำแนะนำ |
|---|---|
| สภาพแวดล้อมการลงนาม Windows ใหม่ | KSP |
| รองรับ Windows CNG | KSP |
| Microsoft SignTool และเครื่องมือ Windows สมัยใหม่อื่นๆ | KSP |
| ซอฟต์แวร์ระบุอย่างชัดเจนว่าต้องใช้ CSP | CSP |
| แอปพลิเคชัน CryptoAPI แบบดั้งเดิม | CSP |
เครื่องมือต้องใช้ /csp และ /kc | CSP |
ความแตกต่างหลักระหว่าง KSP และ CSP อยู่ที่อินเทอร์เฟซ Provider เชิงการเข้ารหัสที่ Windows ใช้แตกต่างกัน โดยโมเดลความปลอดภัยของคีย์ส่วนตัวระยะไกลยังคงเหมือนเดิม
ไม่ว่าจะใช้ KSP หรือ CSP คีย์ส่วนตัวสำหรับการลงนามโค้ดจะไม่ถูกบันทึกลงในไคลเอนต์ท้องถิ่น
จำนวนครั้งการลงนาม
จำนวนครั้งการลงนามของ Windows Provider คำนวณตามจำนวนการลงนามระยะไกลที่เกิดขึ้นจริงในระดับล่าง
ตัวอย่างเช่น:
SHA256 签名一次 = 1 次
หากมีการเซ็น SHA256 กับไฟล์เดียวกันเสร็จก่อน แล้วจึง追加การเซ็นอีกครั้ง จะทำให้เกิดการเรียกใช้คีย์ส่วนตัวระยะไกลอีกครั้ง ดังนั้นจึงต้องคำนวณแยกกัน
ในสถานการณ์ KSP การเซ็นคู่ SHA256 และ SHA1 กับไฟล์เดียวกันมักจะทำให้เกิดการเรียกเซ็นระดับล่างสองครั้ง
โปรดดูกฎเฉพาะใน เอกสารอ้างอิง
การประทับเวลา
การเซ็น Windows Authenticode มักแนะนำให้เพิ่มการประทับเวลาที่เชื่อถือได้
สถานการณ์การเซ็นโค้ดสมัยใหม่แนะนำให้ใช้การประทับเวลา RFC 3161 ก่อนเป็นอันดับแรก เช่น:
http://timestamp.acs.microsoft.com
สภาพแวดล้อมการใช้งานจริงควรเลือก TSA ที่เหมาะสมตามเวอร์ชันของ Windows เป้าหมาย นโยบายใบรับรอง สภาพแวดล้อมเครือข่าย และข้อกำหนดของผู้ให้บริการ timestamp
ดูรายละเอียดเกี่ยวกับ timestamp server และโปรโตคอลได้ที่ เอกสารอ้างอิง
ข้อควรระวังด้านความปลอดภัย
เมื่อใช้ Windows Provider ควรคำนึงถึงสิ่งต่อไปนี้:
- ควรปกป้อง Access Secret ในฐานะข้อมูลรับรองที่มีความอ่อนไหว
- อย่าเขียนข้อมูลรับรองการเข้าถึงลงในสคริปต์สาธารณะหรือบันทึก
- ไฟล์คอนฟิกูเรชันของ Provider ไม่ควรเผยแพร่สู่สาธารณะ
- ไฟล์ใบรับรองในเครื่องไม่มี private key สำหรับการลงนามโค้ด
- private key สำหรับการลงนามโค้ดจะจัดเก็บอยู่ใน cloud HSM ตลอดเวลา
- เมื่อ KSP/CSP เริ่มกระบวนการลงนาม จำเป็นต้องเข้าถึงบริการลงนามโค้ดระยะไกลได้
- เมื่อใช้ certificate store แบบ LocalMachine ควรให้ความสำคัญเป็นพิเศษกับสิทธิ์ผู้ใช้ Windows และขอบเขตการเข้าถึงข้อมูลรับรอง
config.dat ของ CSP ได้รับการปกป้องด้วย DPAPI ของ Windows user profile ปัจจุบัน การลงทะเบียนใบรับรองไปยัง LocalMachine ไม่ได้เปลี่ยนขอบเขตการปกป้องของ DPAPI ของคอนฟิกูเรชันนั้นโดยอัตโนมัติ