Skip to main content

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สถานการณ์ที่เหมาะสม
KSPCNG (Cryptography API: Next Generation)แอปพลิเคชันและเครื่องมือลงนาม Windows สมัยใหม่ เลือกใช้เป็นลำดับแรก
CSPCryptoAPIแอปพลิเคชันดั้งเดิมหรือซอฟต์แวร์ที่ระบุอย่างชัดเจนว่าต้องใช้ 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-userCurrentUser\My
local-machineLocalMachine\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 CNGKSP
เครื่องมือ Windows สมัยใหม่ เช่น Microsoft SignToolKSP
ซอฟต์แวร์ระบุอย่างชัดเจนว่าต้องใช้ CSPCSP
แอปพลิเคชัน CryptoAPI แบบดั้งเดิมCSP
เครื่องมือต้องใช้ /csp และ /kcCSP

ความแตกต่างหลักระหว่าง 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 ของการกำหนดค่านั้นโดยอัตโนมัติ