เพิ่มลายเซ็นดิจิทัลให้กับงานนำเสนอบน Android
ภาพรวม
ลายเซ็นดิจิทัลช่วยให้ผู้รับตรวจสอบได้ว่าใครเป็นผู้เซ็นงานนำเสนอและเนื้อหาที่เซ็นถูกเปลี่ยนแปลงหรือไม่ มีแนวคิดด้านความปลอดภัยที่เกี่ยวข้องสามประการที่สำคัญดังนี้:
- ใบรับรองดิจิทัล คือข้อมูลประจำตัวอิเล็กทรอนิกส์ที่เชื่อมโยงตัวตนกับกุญแจสาธารณะ หน่วยงานที่ออกใบรับรองที่เชื่อถือได้ (CA) สามารถออกใบรับรองได้ หรือองค์กรอาจใช้ใบรับรองที่เซ็นด้วยตนเองสำหรับกระบวนการภายใน
- ลายเซ็นดิจิทัล สร้างจากเนื้อหาของงานนำเสนอและกุญแจส่วนตัวของผู้ถือใบรับรอง จากนั้นกุญแจสาธารณะของใบรับรองสามารถใช้ตรวจสอบลายเซ็นได้ ลายเซ็นให้หลักฐานของที่มและความสมบูรณ์; ไม่ได้เข้ารหัสงานนำเสนอ
- การป้องกันด้วยรหัสผ่าน ควบคุมว่าผู้ใช้สามารถเปิดหรือแก้ไขงานนำเสนอได้หรือไม่ เป็นสิ่งที่แยกจากการเซ็นดิจิทัลและอธิบายไว้ใน การนำเสนอที่ป้องกันด้วยรหัสผ่าน
PowerPoint มีคำสั่ง Add a Digital Signature ภายใต้ File > Info > Protect Presentation.

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

Aspose.Slides เปิดเผยลายเซ็นผ่าน IPresentation.getDigitalSignatures ซึ่งคืนค่าเป็น IDigitalSignatureCollection ที่รายการของมันทำตาม IDigitalSignature. งานนำเสนอสามารถมีหลายลายเซ็นได้
ทำความเข้าใจใบรับรอง PFX และรหัสผ่าน
ไฟล์ PFX หรือที่รู้จักในชื่อไฟล์ PKCS#12 และมักมีส่วนขยายเป็น .pfx หรือ .p12 สามารถบรรจุใบรับรอง X.509, กุญแจส่วนตัว, และโซ่ใบรับรอง กุญแจส่วนตัวคือสิ่งที่ทำให้ผู้ถือสามารถสร้างลายเซ็นได้ ใบรับรองที่ไม่มีกุญแจส่วนตัวที่เข้าถึงไม่ได้ไม่สามารถใช้เซ็นงานนำเสนอได้
รหัสผ่าน PFX ปกป้องแพ็กเกจใบรับรองและกุญแจส่วนตัว ไม่ใช่ รหัสผ่านสำหรับเปิดหรือแก้ไขงานนำเสนอ อย่า commit ไฟล์ PFX หรือรหัสผ่านของมันลงใน source control ในการผลิต ควรจำกัดการเข้าถึงไฟล์ใบรับรองและดึงรหัสผ่านจากที่เก็บความลับหรือแหล่งกำหนดค่าที่ปลอดภัย ตัวอย่างด้านล่างใช้ตัวแปรสภาพแวดล้อมเพียงเพื่อหลีกเลี่ยงการฝังรหัสผ่านในโค้ด
เพิ่มลายเซ็นดิจิทัลให้กับงานนำเสนอ
เพื่อเซ็นกระบวนการทำงานของงานนำเสนอจริง ให้โหลดไฟล์ PPTX ที่มีอยู่แล้ว สร้าง DigitalSignature จากใบรับรอง PFX และรหัสผ่านของมัน เพิ่มลายเซ็นเข้าไปในคอลเลกชันของงานนำเสนอ แล้วบันทึกเป็นไฟล์ PPTX
import com.aspose.slides.*;
String certificatePassword = System.getenv("PFX_PASSWORD");
if (certificatePassword == null || certificatePassword.isEmpty()) {
throw new IllegalStateException("Set the PFX_PASSWORD environment variable.");
}
Presentation presentation = new Presentation("InputPresentation.pptx");
try {
DigitalSignature signature = new DigitalSignature("signing-certificate.pfx", certificatePassword);
signature.setComments("Approved for release.");
presentation.getDigitalSignatures().add(signature);
presentation.save("InputPresentation-signed.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
การบันทึกผลลัพธ์ด้วยชื่อใหม่จะทำให้ไฟล์ต้นฉบับที่ยังไม่ได้เซ็นยังคงอยู่ ค่าที่ตั้งโดย IDigitalSignature.setComments อธิบายวัตถุประสงค์ของลายเซ็น; ไม่ได้เป็นการควบคุมด้านความปลอดภัย
ตรวจสอบลายเซ็นดิจิทัล
เมื่อคุณโหลดไฟล์ PPTX ที่เซ็นแล้ว ให้ตรวจสอบแต่ละรายการที่คืนค่าจาก IPresentation.getDigitalSignatures วิธีการ IDigitalSignature.isValid จะระบุว่าลายเซ็นที่ฝังอยู่เป็นลายเซ็นที่ถูกต้องสำหรับเนื้อหาของงานนำเสนอปัจจุบันหรือไม่
import com.aspose.slides.*;
Presentation presentation = new Presentation("InputPresentation-signed.pptx");
try {
IDigitalSignatureCollection signatures = presentation.getDigitalSignatures();
int signatureCount = signatures.size();
if (signatureCount == 0) {
System.out.println("The presentation does not contain digital signatures.");
} else {
boolean allSignaturesAreValid = true;
java.text.SimpleDateFormat signTimeFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.security.cert.CertificateFactory certificateFactory = java.security.cert.CertificateFactory.getInstance("X.509");
for (IDigitalSignature signature : signatures) {
boolean signatureIsValid = signature.isValid();
String signatureStatus = signatureIsValid ? "VALID" : "INVALID";
java.util.Date signTime = signature.getSignTime();
String formattedSignTime = signTimeFormat.format(signTime);
byte[] certificateData = signature.getCertificate();
java.io.ByteArrayInputStream certificateStream = new java.io.ByteArrayInputStream(certificateData);
java.security.cert.X509Certificate certificate = (java.security.cert.X509Certificate) certificateFactory.generateCertificate(certificateStream);
javax.security.auth.x500.X500Principal signerPrincipal = certificate.getSubjectX500Principal();
String signerName = signerPrincipal.getName();
System.out.println(signerName + ", " + formattedSignTime + " -- " + signatureStatus);
allSignaturesAreValid &= signatureIsValid;
}
if (allSignaturesAreValid) {
System.out.println("All embedded signatures are valid for the current presentation.");
} else {
System.out.println("At least one embedded signature is invalid.");
}
}
} finally {
presentation.dispose();
}
ผลลัพธ์ที่ไม่ถูกต้องมักหมายความว่าเนื้อหาของงานนำเสนอที่เซ็นหรือข้อมูลลายเซ็นถูกเปลี่ยนแปลงหลังจากเซ็น หรือไฟล์เสียหาย การลบลายเซ็นทั้งหมดทำให้ได้งานนำเสนอที่ไม่ได้เซ็น ดังนั้นการตรวจสอบเพียงความถูกต้องของรายการจึงไม่เพียงพอ: กระบวนการที่ต้องคำนึงถึงความปลอดภัยต้องตรวจสอบจำนวนลายเซ็นที่คาดหวังและตัวตนของผู้เซ็นด้วย
ผลลัพธ์การตรวจสอบนี้ไม่ควรถือเป็นการตัดสินใจเชื่อถือใบรับรองอย่างสมบูรณ์ ขึ้นกับนโยบายความปลอดภัยของคุณ แอปพลิเคชันอาจต้องสร้างและตรวจสอบโซ่ใบรับรอง X.509, ตรวจสอบวันหมดอายุและสถานะการเพิกถอน, ยืนยันหัวข้อหรือรหัสนิ้วมือที่คาดหวัง, ตรวจสอบการใช้คีย์, และประเมิน timestamp ที่เชื่อถือได้ ค่า IDigitalSignature.getSignTime เพียงอย่างเดียวไม่ใช่หลักฐานจากหน่วยงาน timestamp ที่เชื่อถือได้
ลบลายเซ็นดิจิทัล
การลบลายเซ็นจะเปลี่ยนสถานะความปลอดภัยของงานนำเสนอ ตัวอย่างต่อไปนี้โหลดไฟล์ PPTX ที่เซ็นแล้ว ลบลายเซ็นทั้งหมดด้วย IDigitalSignatureCollection.clear แล้วบันทึกสำเนาที่ไม่ได้เซ็น
Presentation presentation = new Presentation("InputPresentation-signed.pptx");
try {
presentation.getDigitalSignatures().clear();
presentation.save("InputPresentation-unsigned.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
หากต้องการลบเพียงลายเซ็นเดียว ให้เรียก IDigitalSignatureCollection.removeAt พร้อมด้วยดัชนีเริ่มจากศูนย์ บันทึกเป็นไฟล์ใหม่หากไม่ต้องการเขียนทับไฟล์ที่เซ็นแล้วโดยตรงเป็นส่วนหนึ่งของกระบวนการของคุณ
ข้อควรพิจารณาเรื่องการแก้ไขและรูปแบบไฟล์
- ลายเซ็นไม่ได้ทำให้งานนำเสนอเป็นแบบอ่านอย่างเดียว ผู้ใช้และแอปพลิเคชันยังคงแก้ไขไฟล์ได้ แต่การเปลี่ยนแปลงเนื้อหาที่เซ็นจะทำให้ลายเซ็นเดิมไม่เป็นที่ถูกต้อง
- ทำการแก้ไขทั้งหมดก่อนเซ็น หากต้องเปลี่ยนงานนำเสนอ ให้บันทึกงานนำเสนอที่แก้ไขแล้วและเซ็นฉบับนั้นใหม่อีกครั้ง
- เก็บผลลัพธ์สุดท้ายในรูปแบบ PPTX การแปลงงานนำเสนอที่เซ็นเป็นรูปแบบอื่นจะไม่ถ่ายทอดลายเซ็น PPTX ดั้งเดิมให้เป็นลายเซ็นที่ถูกต้องสำหรับไฟล์ที่แปลงแล้ว
- ถือกุญแจส่วนตัวของใบรับรองว่าเป็นข้อมูลสำคัญ ผู้ที่ได้กุญแจส่วนตัวและรหัสผ่านอาจสร้างลายเซ็นที่ดูเหมือนมาจากผู้ถือใบรับรองนั้นได้
- เก็บไฟล์ต้นฉบับที่ไม่ได้เซ็นหรือสำเนาที่ควบคุมไว้เมื่อแนวนโยบายการเก็บเอกสารของคุณกำหนดให้ทำเช่นนั้น
คำถามที่พบบ่อย
ลายเซ็นดิจิทัลเข้ารหัสงานนำเสนอหรือไม่?
ไม่ ลายเซ็นดิจิทัลให้หลักฐานเกี่ยวกับที่มาและความสมบูรณ์ แต่เนื้อหางานนำเสนอยังคงอ่านได้หากไม่มีการเข้ารหัสแยกต่างหาก ใช้ การป้องกันด้วยรหัสผ่าน เมื่อจำเป็นต้องจำกัดการเข้าถึงเนื้อหา
รหัสผ่าน PFX เป็นรหัสผ่านของงานนำเสนอหรือไม่?
ไม่ รหัสผ่าน PFX ใช้ปลดล็อกกุญแจส่วนตัวที่เก็บอยู่ในแพ็กเกจใบรับรอง ไม่ได้ควบคุมว่าผู้ใดสามารถเปิดหรือแก้ไขไฟล์ PPTX ได้
ฉันสามารถใช้ใบรับรองที่เซ็นด้วยตนเองได้ไหม?
ในเชิงเทคนิคสามารถใช้ใบรับรองที่เซ็นด้วยตนเองได้หากมีกุญแจส่วนตัวที่เข้าถึงได้ ผู้รับจะไม่เชื่อถือโดยอัตโนมัติเว้นแต่ใบรับรองนั้นจะถูกเพิ่มอย่างชัดเจนเข้าไปในสภาพแวดล้อมที่เชื่อถือได้ เวิร์กโฟลว์สาธารณะหรือข้ามองค์กรมักใช้ใบรับรองที่ออกโดย CA ที่เชื่อถือได้
ทำให้ลายเซ็นไม่ถูกต้องคืออะไร?
การเปลี่ยนเนื้อหาที่เซ็นหรือข้อมูลลายเซ็นหลังจากเซ็นทำให้ลายเซ็นไม่ถูกต้อง ไฟล์เสียหายก็อาจทำให้การตรวจสอบล้มเหลว หากลบลายเซ็นทั้งหมด งานนำเสนอจะกลายเป็นงานที่ไม่ได้เซ็น ไม่ใช่ไฟล์ที่มีลายเซ็นไม่ถูกต้อง
ลายเซ็นที่ถูกต้องหมายความว่าต้องเชื่อถือผู้เซ็นหรือไม่?
ไม่โดยตรง ความสมบูรณ์ของลายเซ็นและความเชื่อถือของผู้เซ็นเป็นการตัดสินใจแยกกัน นโยบายการตรวจสอบในผลิตภัณฑ์ควรตรวจสอบโซ่ใบรับรอง, ระยะเวลาที่มีผล, สถานะการเพิกถอน, ตัวตนที่คาดหวัง, การใช้คีย์, และข้อกำหนดของ timestamp ที่เชื่อถือได้เพิ่มเติม
จะเกิดอะไรขึ้นเมื่อใบรับรองหมดอายุ?
การหมดอายุของใบรับรองไม่เปลี่ยนแปลงไบต์ของงานนำเสนอ แต่ส่งผลต่อการประเมินความเชื่อถือของใบรับรองว่าลายเซ็นยังคงยอมรับได้หรือไม่ ขึ้นกับนโยบายของคุณและว่ามี timestamp ที่เชื่อถือได้ยืนยันว่าการเซ็นเกิดขึ้นขณะใบรับรองยังมีอายุหรือไม่ อย่าพึ่งพาเวลาเซ็นที่แสดงอยู่เพียงอย่างเดียวเป็น timestamp ที่เชื่อถือได้
งานนำเสนอที่เซ็นแล้วยังสามารถแก้ไขได้หรือไม่?
ได้ การเซ็นไม่ทำให้ไฟล์ล็อก การแก้ไขเนื้อหาที่เซ็นมักทำให้ลายเซ็นเดิมไม่เป็นที่ถูกต้อง ดังนั้นให้ทำการแก้ไขเสร็จสิ้นแล้วจึงเซ็นฉบับสุดท้าย
งานนำเสนอสามารถมีลายเซ็นมากกว่าหนึ่งอันได้หรือไม่?
ได้ เพิ่มลายเซ็นแต่ละอันเข้าไปในคอลเลกชันที่คืนค่าจาก IPresentation.getDigitalSignatures ก่อนบันทึก ระหว่างการตรวจสอบให้ตรวจสอบลายเซ็นทุกอันและยืนยันว่าผู้เซ็นที่ต้องการทั้งหมดปรากฏอยู่
รูปแบบงานนำเสนอใดบ้างที่รองรับการทำงานเหล่านี้?
Aspose.Slides รองรับการทำงานของลายเซ็นดิจิทัลที่อธิบายไว้ที่นี่เฉพาะสำหรับ PPTX ส่วนรูปแบบ PPT และ OpenDocument ไม่ได้รับการสนับสนุนโดย API นี้
ฉันสามารถลบลายเซ็นโดยไม่ส่งผลต่อสไลด์ได้หรือไม่?
ได้ คุณสามารถลบลายเซ็นหนึ่งอันหรือเคลียร์คอลเลกชันทั้งหมดแล้วบันทึกงานนำเสนอได้ เนื้อหาสไลด์จะยังคงอยู่ แต่ไฟล์ที่บันทึกแล้วจะไม่มีหลักฐานลายเซ็นที่ถูกลบแล้ว