เพิ่มลายเซ็นดิจิทัลลงในพรีเซนเทชันด้วย JavaScript

ภาพรวม

ลายเซ็นดิจิทัลช่วยให้ผู้รับตรวจสอบได้ว่าใครเป็นผู้ลงนามพรีเซนเทชันและเนื้อหาที่ลงนามได้มีการเปลี่ยนแปลงหรือไม่ มีแนวคิดด้านความปลอดภัยที่เกี่ยวข้องสามประการที่สำคัญ:

  • ใบรับรองดิจิทัล คือข้อมูลประจำตัวอิเล็กทรอนิกส์ที่เชื่อมโยงตัวตนกับกุญแจสาธารณะ หน่วยงานออกใบรับรองที่ได้รับความน่าเชื่อถือ (CA) สามารถออกใบรับรองได้ หรือองค์กรสามารถใช้ใบรับรองที่ลงนามด้วยตนเองสำหรับกระบวนการทำงานภายใน
  • ลายเซ็นดิจิทัล ถูกสร้างจากเนื้อหาพรีเซนเทชันและกุญแจส่วนตัวของผู้ถือใบรับรอง แล้วจึงใช้กุญแจสาธารณะของใบรับรองเพื่อตรวจสอบลายเซ็น ลายเซ็นให้หลักฐานเกี่ยวกับแหล่งที่มาและความสมบูรณ์; มันไม่ได้เข้ารหัสพรีเซนเทชัน
  • การปกป้องด้วยรหัสผ่าน ควบคุมว่าผู้ใช้สามารถเปิดหรือแก้ไขพรีเซนเทชันได้หรือไม่ แยกจากการเซ็นดิจิทัลและอธิบายไว้ใน การปกป้องด้วยรหัสผ่าน

PowerPoint มีคำสั่ง Add a Digital Signature อยู่ภายใต้ File > Info > Protect Presentation.

เมนู Protect Presentation ของ PowerPoint พร้อมไฮไลท์ Add a Digital Signature

หลังจากเปิดพรีเซนเทชันที่ลงนามแล้ว PowerPoint สามารถแสดงการแจ้งเตือนสถานะลายเซ็นได้

การแจ้งเตือนของ PowerPoint ระบุว่าพรีเซนเทชันมีลายเซ็นที่ถูกต้อง

Aspose.Slides ทำให้สามารถเข้าถึงลายเซ็นผ่าน Presentation.getDigitalSignatures, ซึ่งจะคืนค่าเป็น DigitalSignatureCollection ที่บรรจุออบเจ็กต์ DigitalSignature พรีเซนเทชันสามารถมีลายเซ็นหลายรายการได้

ทำความเข้าใจใบรับรอง PFX และรหัสผ่าน

ไฟล์ PFX ซึ่งเป็นที่รู้จักในชื่อไฟล์ PKCS#12 และมักมีส่วนขยาย .pfx หรือ .p12 สามารถบรรจุใบรับรอง X.509, กุญแจส่วนตัวของมัน, และห่วงโซ่ใบรับรอง กุญแจส่วนตัวคือสิ่งที่ทำให้ผู้ถือสามารถสร้างลายเซ็นได้ ใบรับรองที่ไม่มีการเข้าถึงกุญแจส่วนตัวไม่สามารถใช้ลงนามพรีเซนเทชันได้

รหัสผ่าน PFX ปกป้องแพคเกจใบรับรองและกุญแจส่วนตัว ไม่ใช่ รหัสผ่านสำหรับเปิดหรือแก้ไขพรีเซนเทชัน อย่าเพิ่มไฟล์ PFX หรือรหัสผ่านของมันลงในระบบควบคุมเวอร์ชัน ในสภาพแวดล้อมการผลิต ให้จำกัดการเข้าถึงไฟล์ใบรับรองและดึงรหัสผ่านจากที่เก็บความลับหรือแหล่งกำหนดค่าที่ได้รับการปกป้อง ตัวอย่างด้านล่างใช้ตัวแปรสิ่งแวดล้อมเท่านั้นเพื่อหลีกเลี่ยงการฝังรหัสผ่านในโค้ด

เพิ่มลายเซ็นดิจิทัลลงในพรีเซนเทชัน

เพื่อทำงานลงนามพรีเซนเทชันจริง ให้โหลดไฟล์ PPTX ที่มีอยู่ สร้างออบเจ็กต์ DigitalSignature จากใบรับรอง PFX พร้อมรหัสผ่านของมัน เพิ่มลายเซ็นเข้าไปในคอลเลกชันของพรีเซนเทชัน แล้วบันทึกเป็นไฟล์ PPTX

const slides = require("aspose.slides.via.java");

const certificatePassword = process.env.PFX_PASSWORD;
if (!certificatePassword) {
    throw new Error("Set the PFX_PASSWORD environment variable.");
}

const presentation = new slides.Presentation("InputPresentation.pptx");
try {
    const signature = new slides.DigitalSignature("signing-certificate.pfx", certificatePassword);
    signature.setComments("Approved for release.");

    presentation.getDigitalSignatures().add(signature);
    presentation.save("InputPresentation-signed.pptx", slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

การบันทึกผลลัพธ์ภายใต้ชื่อใหม่ช่วยรักษาไฟล์ต้นฉบับที่ยังไม่ได้ลงนามไว้ ค่าที่ตั้งโดย DigitalSignature.setComments อธิบายวัตถุประสงค์ของลายเซ็น; มันไม่ใช่การควบคุมความปลอดภัย

ตรวจสอบลายเซ็นดิจิทัล

เมื่อคุณโหลดไฟล์ PPTX ที่ลงนามแล้ว ให้ตรวจสอบแต่ละรายการที่คืนมาจาก Presentation.getDigitalSignatures วิธีการ DigitalSignature.isValid แสดงว่าลายเซ็นที่ฝังอยู่เป็นลายเซ็นที่ถูกต้องสำหรับเนื้อหาพรีเซนเทชันปัจจุบันหรือไม่

ตัวอย่างต่อไปนี้ยังใช้คลาส X509Certificate ของ Node.js เพื่ออ่านชื่อเรื่องจากแต่ละใบรับรองที่ฝังอยู่

const { X509Certificate } = require("node:crypto");
const slides = require("aspose.slides.via.java");

const presentation = new slides.Presentation("InputPresentation-signed.pptx");
try {
    const signatures = presentation.getDigitalSignatures();
    const signatureCount = signatures.size();

    if (signatureCount === 0) {
        console.log("The presentation does not contain digital signatures.");
    } else {
        let allSignaturesAreValid = true;

        for (let index = 0; index < signatureCount; index++) {
            const signature = signatures.get_Item(index);
            const signatureIsValid = signature.isValid();
            const signatureStatus = signatureIsValid ? "VALID" : "INVALID";
            const signTime = signature.getSignTime().toString();

            const certificateData = signature.getCertificate();
            const certificate = new X509Certificate(Buffer.from(certificateData));
            const signerName = certificate.subject;

            console.log(`${signerName}, ${signTime} -- ${signatureStatus}`);

            allSignaturesAreValid = allSignaturesAreValid && signatureIsValid;
        }

        if (allSignaturesAreValid) {
            console.log("All embedded signatures are valid for the current presentation.");
        } else {
            console.log("At least one embedded signature is invalid.");
        }
    }
} finally {
    presentation.dispose();
}

ผลลัพธ์ไม่ถูกต้องมักหมายความว่าเนื้อหาที่ลงนามหรือข้อมูลลายเซ็นมีการเปลี่ยนแปลงหลังจากลงนาม หรือไฟล์เสียหาย การลบลายเซ็นทั้งหมดทำให้พรีเซนเทชันกลายเป็นแบบที่ไม่ได้ลงนาม ดังนั้นการตรวจสอบความถูกต้องของรายการเพียงอย่างเดียวไม่พอ: กระบวนการที่ต้องคำนึงถึงความปลอดภัยต้องตรวจสอบจำนวนลายเซ็นที่คาดหวังและตัวตนของผู้ลงนามที่คาดหวังด้วย

ผลลัพธ์ความถูกต้องนี้ไม่ควรถือเป็นการตัดสินใจเชื่อถือใบรับรองอย่างสมบูรณ์ ขึ้นอยู่กับนโยบายความปลอดภัยของคุณ แอปพลิเคชันอาจต้องสร้างและตรวจสอบห่วงโซ่ใบรับรอง X.509, ตรวจสอบวันหมดอายุและสถานะการเพิกถอนของใบรับรอง, ยืนยันหัวข้อหรือรหัสลายเซ็นที่คาดหวัง, ตรวจสอบการใช้กุญแจ, และประเมินตราประทับเวลาที่เชื่อถือได้ ค่า DigitalSignature.getSignTime เพียงอย่างเดียวไม่ถือเป็นหลักฐานจากหน่วยงานเวลาที่เชื่อถือได้

ลบลายเซ็นดิจิทัล

การลบลายเซ็นทำให้สถานะความปลอดภัยของพรีเซนเทชันเปลี่ยนไป ตัวอย่างต่อไปนี้โหลดไฟล์ PPTX ที่ลงนามแล้ว ลบลายเซ็นทั้งหมดด้วย DigitalSignatureCollection.clear และบันทึกสำเนาที่ไม่ได้ลงนาม

const slides = require("aspose.slides.via.java");

const presentation = new slides.Presentation("InputPresentation-signed.pptx");
try {
    presentation.getDigitalSignatures().clear();
    presentation.save("InputPresentation-unsigned.pptx", slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

หากต้องการลบเฉพาะลายเซ็นหนึ่งรายการ ให้เรียก DigitalSignatureCollection.removeAt พร้อมด้วยดัชนีฐานศูนย์ของมัน บันทึกเป็นไฟล์ใหม่หากไม่ต้องการเขียนทับไฟล์ต้นฉบับที่ลงนามซึ่งเป็นส่วนหนึ่งของกระบวนการทำงานของคุณ

การแก้ไขและข้อพิจารณาด้านรูปแบบ

  • ลายเซ็นไม่ได้ทำให้พรีเซนเทชันเป็นแบบอ่านอย่างเดียว ผู้ใช้และแอปพลิเคชันยังคงแก้ไขไฟล์ได้ แต่การเปลี่ยนแปลงเนื้อหาที่ลงนามมักทำให้ลายเซ็นที่มีอยู่ไม่ถูกต้อง
  • ทำการแก้ไขทั้งหมดก่อนลงนาม หากพรีเซนเทชันต้องมีการเปลี่ยนแปลง ให้บันทึกพรีเซนเทชันที่แก้ไขแล้วและลงนามการแก้ไขนั้นอีกครั้ง
  • เก็บผลลัพธ์สุดท้ายในรูปแบบ PPTX การแปลงพรีเซนเทชันที่ลงนามเป็นรูปแบบอื่นจะไม่ถ่ายทอดลายเซ็น PPTX ดั้งเดิมเป็นลายเซ็นที่ถูกต้องสำหรับไฟล์ที่แปลงแล้ว
  • ถือกุญแจส่วนตัวของใบรับรองว่าเป็นข้อมูลที่อ่อนไหว ผู้ที่ได้กุญแจส่วนตัวและรหัสผ่านของมันอาจสร้างลายเซ็นที่ดูเหมือนมาจากผู้ถือใบรับรองนั้นได้
  • รักษาไฟล์ต้นฉบับที่ยังไม่ได้ลงนามหรือสำเนาที่ควบคุมได้เมื่อ นโยบายการเก็บรักษาเอกสารของคุณต้องการ

คำถามที่พบบ่อย

ลายเซ็นดิจิทัลเข้ารหัสพรีเซนเทชันหรือไม่?

ไม่. ลายเซ็นดิจิทัลให้หลักฐานเกี่ยวกับแหล่งที่มาและความสมบูรณ์ แต่เนื้อหาพรีเซนเทชันยังคงอ่านได้ หากไม่มีการเข้ารหัสแยก ใช้ การปกป้องด้วยรหัสผ่าน เมื่อจำเป็นต้องจำกัดการเข้าถึงเนื้อหา

รหัสผ่าน PFX เป็นรหัสผ่านของพรีเซนเทชันหรือไม่?

ไม่. รหัสผ่าน PFX ใช้ปลดล็อกกุญแจส่วนตัวที่เก็บอยู่ในแพคเกจใบรับรอง ไม่ได้ควบคุมว่าใครสามารถเปิดหรือแก้ไขไฟล์ PPTX ได้

สามารถใช้ใบรับรองที่ลงนามด้วยตนเองได้หรือไม่?

โดยเทคนิคแล้ว สามารถใช้ใบรับรองที่ลงนามด้วยตนเองได้หากมีการเข้าถึงกุญแจส่วนตัว ผู้รับจะไม่ได้รับความเชื่อถือโดยอัตโนมัติเว้นแต่ใบรับรองนั้นจะถูกเพิ่มอย่างชัดเจนในสภาพแวดล้อมที่เชื่อถือได้ งานที่ทำข้ามองค์กรหรือสาธารณะมักใช้ใบรับรองที่ออกโดย CA ที่เชื่อถือได้

อะไรทำให้ลายเซ็นไม่ถูกต้อง?

การเปลี่ยนแปลงเนื้อหาพรีเซนเทชันที่ลงนามหรือข้อมูลลายเซ็นหลังจากลงนามจะทำให้ลายเซ็นไม่ถูกต้อง ความเสียหายของไฟล์ก็อาจทำให้การตรวจสอบล้มเหลว หากลบลายเซ็นทั้งหมด พรีเซนเทชันจะกลายเป็นแบบที่ไม่ได้ลงนาม ไม่ใช่ไฟล์ที่มีลายเซ็นไม่ถูกต้อง

ลายเซ็นที่ถูกต้องหมายความว่าต้องเชื่อถือผู้ลงนามหรือไม่?

ไม่โดยตรง ความสมบูรณ์ของลายเซ็นและความเชื่อถือของผู้ลงนามเป็นการตัดสินใจแยกกัน นโยบายการตรวจสอบการผลิตควรตรวจสอบห่วงโซ่ใบรับรอง, ช่วงเวลาที่ใช้ได้, สถานะการเพิกถอน, ตัวตนที่คาดหวัง, การใช้กุญแจ, และข้อกำหนดของตราประทับเวลาที่เชื่อถือได้

หากใบรับรองหมดอายุจะเกิดอะไรขึ้น?

การหมดอายุของใบรับรองไม่เปลี่ยนแปลงไบต์ของพรีเซนเทชัน แต่ส่งผลต่อการประเมินความเชื่อถือของใบรับรอง การที่ลายเซ็นยังคงใช้ได้หรือไม่ขึ้นกับนโยบายของคุณและว่ามีตราประทับเวลาเชื่อถือได้ที่พิสูจน์ว่าการลงนามเกิดขึ้นในช่วงที่ใบรับรองยังมีผลหรือไม่ อย่าอาศัยเวลาแสดงการลงนามอย่างเดียวเป็นตราประทับเวลาที่เชื่อถือได้

พรีเซนเทชันที่ลงนามยังสามารถแก้ไขได้หรือไม่?

ได้ การลงนามไม่ได้ล็อกไฟล์ การแก้ไขเนื้อหาที่ลงนามมักทำให้ลายเซ็นที่มีอยู่ไม่ถูกต้อง ดังนั้นควรทำการแก้ไขให้เสร็จก่อนแล้วจึงลงนามเวอร์ชันสุดท้าย

พรีเซนเทชันสามารถมีลายเซ็นมากกว่าหนึ่งรายการได้หรือไม่?

ได้ เพิ่มลายเซ็นแต่ละรายการลงในคอลเลกชันที่คืนโดย Presentation.getDigitalSignatures ก่อนบันทึก ในขั้นตอนการตรวจสอบให้ตรวจสอบลายเซ็นทั้งหมดและยืนยันว่าผู้ลงนามที่จำเป็นทั้งหมดอยู่

รูปแบบพรีเซนเทชันใดบ้างที่รองรับการดำเนินการเหล่านี้?

Aspose.Slides รองรับการดำเนินการลายเซ็นดิจิทัลตามที่อธิบายไว้ที่นี่เฉพาะสำหรับ PPTX รูปแบบ PPT และ OpenDocument ไม่ได้รับการสนับสนุนโดย API นี้

สามารถลบลายเซ็นโดยไม่ส่งผลต่อสไลด์ได้หรือไม่?

ได้ คุณสามารถลบลายเซ็นหนึ่งรายการหรือทำความสะอาดคอลเลกชันทั้งหมดแล้วบันทึกพรีเซนเทชัน เนื้อหาสไลด์จะยังคงอยู่ แต่ไฟล์ที่บันทึกแล้วจะไม่มีหลักฐานลายเซ็นที่ถูกลบแล้ว