Windows Provider
sslTrus มีวิธีการผสานรวม KSP (Key Storage Provider) และ CSP (Cryptographic Service Provider) สองแบบสำหรับ Windows 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 จะจดจำใบรับรองที่เกี่ยวข้องว่ามีคีย์ส่วนตัวที่ใช้งานได้ แต่คีย์ส่วนตัวจริงยังคงถูกเก็บไว้ใน Cloud 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 |
|---|---|
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 | ระบุอัลกอริทึมการย่อยของการประทับเวลา |
ปัจจุบันอินเทอร์เฟซการลงนามระยะไกลรองรับอัลกอริทึมการย่อย SHA1 และ SHA256 สำหรับสถานการณ์การลงนามใหม่ควรเลือกใช้ SHA256 เป็นลำดับแรก และใช้ SHA1 เฉพาะเมื่อต้องรองรับระบบเดิมเท่านั้น
ตรวจสอบลายเซ็น
หลังจากลงนามเสร็จสิ้น สามารถใช้ 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 |
| เครื่องมือ Windows สมัยใหม่ เช่น Microsoft SignTool | KSP |
| ซอฟต์แวร์ระบุอย่างชัดเจนว่าต้องใช้ CSP | CSP |
| แอปพลิเคชัน CryptoAPI แบบดั้งเดิม | CSP |
เครื่องมือต้องใช้ /csp และ /kc | CSP |
ความแตกต่างหลักระหว่าง KSP และ CSP อยู่ที่อินเทอร์เฟซของ cryptography 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 และโปรโตคอล โปรดดูที่ เอกสารอ้างอิง
คำแนะนำด้านความปลอดภัย
เมื่อใช้ Windows Provider ควรคำนึงถึง:
- Access Secret ควรได้รับการปกป้องในฐานะข้อมูลรับรองที่ละเอียดอ่อน
- อย่าเขียนข้อมูลรับรองการเข้าถึงลงในสคริปต์สาธารณะหรือบันทึก
- ไฟล์กำหนดค่า Provider ไม่ควรเผยแพร่สู่สาธารณะ
- ไฟล์ใบรับรองภายในเครื่องไม่มีคีย์ส่วนตัวสำหรับการลงนามโค้ด
- คีย์ส่วนตัวสำหรับการลงนามโค้ดจะถูกเก็บไว้ใน HSM บนคลาวด์เสมอ
- เมื่อ KSP/CSP เริ่มการลงนาม จำเป็นต้องสามารถเข้าถึงบริการลงนามโค้ดระยะไกลได้
- เมื่อใช้คลังใบรับรอง LocalMachine ควรให้ความสำคัญเป็นพิเศษกับสิทธิ์ผู้ใช้ Windows และขอบเขตการเข้าถึงข้อมูลรับรอง
config.dat ของ CSP ใช้ DPAPI ของ Profile ผู้ใช้ Windows ปัจจุบันในการป้องกัน การลงทะเบียนใบรับรองกับ LocalMachine ไม่ได้เปลี่ยนแปลงขอบเขตการป้องกัน DPAPI ของการกำหนดค่านั้นโดยอัตโนมัติ