คู่มือชุดคำสั่งและแนวทางการพัฒนาระบบการสร้างเอกสารรับรองอิเล็กทรอนิกส์ในรูปแบบ Hybrid PDF/A-3 ตามมาตรฐาน ขมธอ.11 (ETDA Standard) เพื่อสนับสนุนการเปลี่ยนผ่านสู่ดิจิทัลอย่างมั่นคงปลอดภัย
โครงการนี้จัดทำขึ้นเพื่อเป็น Starter Kit สำหรับนักพัฒนา เพื่อใช้ศึกษาและเริ่มต้นสร้างเอกสารอิเล็กทรอนิกส์ที่มีความน่าเชื่อถือสูง โดยรวมคุณสมบัติสำคัญตามมาตรฐาน ETDA ไว้ในที่เดียว:
- Human-Readable: ไฟล์ PDF ที่มนุษย์อ่านได้และพิมพ์ออกมาได้
- Machine-Readable: ข้อมูลโครงสร้าง (XML/JSON) ที่ฝังอยู่ในไฟล์เพื่อให้ระบบคอมพิวเตอร์ประมวลผลต่อได้ทันที
- Digital Trust: การลงนามดิจิทัล (PAdES) และการตรวจสอบสถานะใบรับรองระยะยาว (LTV)
- Node.js: เวอร์ชั่น 16 ขึ้นไป
- NPM: จัดการ Dependencies
- แตกไฟล์โครงการหรือ clone repository
- เปิด Terminal ในโฟลเดอร์โครงการแล้วรันคำสั่ง:
npm install
- เริ่มต้นรันเซิร์ฟเวอร์:
node src/server.js
- เข้าใช้งานผ่าน Browser:
เปิดไปที่
http://localhost:3000
ในหน้า Playground คุณสามารถทดลองกระบวนการทำงานได้ดังนี้:
- เลือกประเภทเอกสาร: ระบบมีข้อมูลตัวอย่าง (JSON) ของใบรับรองผลการเรียน (Transcript) และใบกำกับภาษี (Invoice)
- สร้างและลงนาม PDF:
- มี 3 รูปแบบ: ลงนามปกติ, ลงนามพร้อม LTV, และแบบครบวงจร (LTV + QR Code)
- ตรวจสอบผลลัพธ์: ดูไฟล์ PDF ในตัวอย่าง และตรวจสอบไฟล์ที่ฝังอยู่ (Attached Files)
- การตรวจสอบความถูกต้อง (Verification):
- Online: ตรวจสอบสถานะใบรับรองและ Integrity ของไฟล์
- Offline (QR Code): จำลองการสแกนด้วยสมาร์ทโฟนเพื่อตรวจสอบข้อมูลสำคัญโดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต
- การสกัดข้อมูล (Data Extraction): ทดลองดึงไฟล์ XML/JSON ออกจาก PDF เพื่อนำไปใช้ในระบบงานอื่น
หากคุณต้องการนำฟีเจอร์ต่างๆ ไปใช้งานในระบบของคุณ สามารถศึกษาได้จากโครงสร้างไฟล์ดังนี้:
- ไฟล์ที่เกี่ยวข้อง:
src/services/PdfGenerator.js - วิธีใช้: ใช้ฟังก์ชัน
createBasePDFเพื่อสร้างหน้าเอกสาร และcreateHybridPDFเพื่อฝังไฟล์ XML/JSON ลงไปโดยกำหนดafRelationshipตามมาตรฐาน
- ไฟล์ที่เกี่ยวข้อง:
src/services/DigitalSigner.js - วิธีใช้:
signPDF: ใช้สำหรับลงนามดิจิทัลบน PDFapplyLTV: (ในPdfGenerator.js) ใช้สำหรับฝังข้อมูล DSS (Certs, OCSP, CRL) เพื่อให้ตรวจสอบลายเซ็นได้ในระยะยาวแม้ใบรับรองหมดอายุ
- ไฟล์ที่เกี่ยวข้อง:
src/services/VerificationService.js: ตรวจสอบสถานะลายเซ็นดิจิทัล (PKCS#7)src/services/VerificationQrService.js: จัดการการสร้างและตรวจสอบ QR Code แบบ Compact (CBOR/Base45) สำหรับการตรวจสอบแบบออฟไลน์
- ไฟล์ที่เกี่ยวข้อง:
src/services/MaskingService.js - วิธีใช้: ใช้ฟังก์ชัน
applyMasking(input, start, mid, end)เพื่อทำ Masking ข้อมูลส่วนบุคคล (PDPA) เช่น เลขบัตรประชาชน หรือเบอร์โทรศัพท์ ก่อนนำไปแสดงผลหรือประมวลผล
| หากคุณต้องการ... | ต้องหยิบ Code จากไฟล์... | ฟังก์ชันหลัก |
|---|---|---|
| สร้างโครงสร้าง PDF | src/services/PdfGenerator.js |
createBasePDF() |
| ฝังไฟล์ XML/JSON ใน PDF | src/services/PdfGenerator.js |
createHybridPDF() |
| ลงนามดิจิทัล (Sign) | src/services/DigitalSigner.js |
signPDF() |
| ทำระบบตรวจสอบออฟไลน์ | src/services/VerificationQrService.js |
generateVerificationQr() |
| ตรวจสอบลายเซ็นดั้งเดิม | src/services/VerificationService.js |
verifySignature() |
| ทำ Data Masking (PDPA) | src/services/MaskingService.js |
applyMasking() |
เนื่องจากระบบใช้ใบรับรองจำลอง (Self-signed) สำหรับการพัฒนา Adobe Acrobat จะแสดงสถานะเป็น "Validity Unknown" (เครื่องหมายคำถามสีเหลือง) เป็นปกติ จนกว่าเราจะติตตั้งใบรับรองให้เครื่องเชื่อถือ:
- ดาวน์โหลดใบรับรอง: คลิกปุ่ม "Download Certificate (.crt)" จากหน้าจอหลักของระบบ
- ติดตั้งความเชื่อถือ (Manual Trust):
- เปิดไฟล์ PDF ที่สร้างขึ้นด้วย Adobe Acrobat
- คลิกขวาที่ลายเซ็น -> เลือก Show Signature Properties
- คลิกปุ่ม Show Signer's Certificate
- ไปที่แถบ Trust -> คลิก Add to Trusted Certificates... -> กด OK
- ติ๊กถูกที่ช่อง Certified documents และอีก 3 ช่องย่อยด้านล่าง (Dynamic content, Embedded JavaScript, Cross-domain browser) ให้ครบ
- กด OK ทุกหน้าจนจบ
- ตรวจสอบใหม่: ปิดไฟล์ PDF และเปิดใหม่อีกครั้ง ลายเซ็นควรแสดงเป็น "Signature is VALID" (เครื่องหมายถูกสีเขียว)
Tip
หากสถานะยังเป็น "สีแดง" (INVALID) แม้จะกด Trust แล้ว: ให้ตรวจสอบว่าได้ติดตั้งใบรับรองเวอร์ชั่นล่าสุดจากระบบหรือไม่ (หากมีการรันเซิร์ฟเวอร์ใหม่ ระบบอาจสร้างกุญแจชุดใหม่ขึ้นมา)
โครงการนี้ (Source Code) จัดทำขึ้นโดย สำนักงานพัฒนาธุรกรรมทางอิเล็กทรอนิกส์ (สพธอ. หรือ ETDA) โดยมีวัตถุประสงค์เพื่อเป็น "ตัวอย่างเพื่อการศึกษาและเป็นวิทยาทาน (Educational Purposes Only)" ในการส่งเสริมและให้ความรู้เกี่ยวกับการสร้างมาตรฐานเอกสารอิเล็กทรอนิกส์ของประเทศไทยเท่านั้น
ทาง ETDA เปิดกว้างให้ประชาชนและภาคธุรกิจสามารถนำ Source Code นี้ไปศึกษา ดัดแปลง หรือต่อยอดได้ภายใต้สัญญาอนุญาต MIT License อย่างไรก็ตาม ผู้ที่นำไปใช้งานต้องรับทราบและยินยอมเงื่อนไขดังต่อไปนี้:
- ใช้งานตามสภาพ (AS IS): โครงการนี้เป็นการนำเทคโนโลยีและ Open Source ต่างๆ มาประกอบเป็นตัวอย่างการทำงาน ETDA ไม่รับประกันความสมบูรณ์ ความถูกต้อง หรือความปลอดภัยของ Source Code นี้สำหรับการนำไปใช้งานจริงบนระบบ Production
- ปฏิเสธความรับผิดชอบในทุกกรณี: หากเกิดความเสียหายใดๆ ขึ้นจากการนำโค้ดนี้ไปใช้งาน ไม่ว่าจะเป็นความเสียหายทางธุรกิจ การสูญหายของข้อมูล ข้อผิดพลาดของระบบ (Bugs) หรือ การถูกร้องเรียนเรื่องการละเมิดลิขสิทธิ์/สิทธิบัตรจากบุคคลที่สาม ทาง ETDA จะไม่รับผิดชอบหรือชดใช้ค่าเสียหายในทุกกรณี
- หน้าที่ของผู้ใช้งาน: ผู้ที่นำ Source Code นี้ไปใช้ มีหน้าที่ต้องตรวจสอบ ทดสอบ ปรับปรุง และประเมินความเสี่ยง รวมถึงตรวจสอบสิทธิ์การใช้งาน (License) ของไลบรารีต่างๆ ที่เชื่อมต่ออยู่ ให้เหมาะสมและถูกต้องตามกฎหมายก่อนนำไปใช้งานในธุรกิจของตนเองอย่างแท้จริง
พัฒนาโดย ETDA Standard Development Team | อ้างอิงมาตรฐาน ขมธอ.11