Lägg till digitala signaturer i presentationer i Python
Översikt
En digital signatur hjälper mottagaren att avgöra vem som har signerat en presentation och om det signerade innehållet har ändrats. Tre relaterade säkerhetskoncept är viktiga här:
- En digitalt certifikat är en elektronisk legitimation som kopplar en identitet till en publik nyckel. En betrodd certifikatutfärdare (CA) kan utfärda ett certifikat, eller så kan en organisation använda ett självsignerat certifikat för interna arbetsflöden.
- En digital signatur skapas från presentationsinnehållet och certifikatinnehavarens privata nyckel. Certifikatets publika nyckel kan sedan användas för att verifiera signaturen. En signatur ger bevis på ursprung och integritet; den krypterar inte presentationen.
- Lösenordsskydd styr om en användare kan öppna eller ändra en presentation. Det är separat från digital signering och beskrivs i Lösenordsskyddade presentationer.
PowerPoint tillhandahåller kommandot Add a Digital Signature under File > Info > Protect Presentation.

När en signerad presentation öppnas kan PowerPoint visa en signaturstatusnotifiering.

Aspose.Slides exponerar signaturer via Presentation.getDigitalSignatures, vilket returnerar en DigitalSignatureCollection vars objekt är instanser av DigitalSignature. En presentation kan innehålla flera signaturer.
Förstå PFX‑certifikat och lösenord
En PFX‑fil, även känd som en PKCS#12‑fil och vanligtvis med filändelsen .pfx eller .p12, kan innehålla ett X.509‑certifikat, dess privata nyckel och certifikatkedjan. Den privata nyckeln möjliggör för innehavaren att skapa en signatur. Ett certifikat utan en åtkomlig privat nyckel kan inte användas för att signera en presentation.
PFX‑lösenordet skyddar certifikatpaketet och den privata nyckeln. Det är inte ett lösenord för att öppna eller redigera presentationen. Checka inte in PFX‑filer eller deras lösenord i källkontrollen. I produktionsmiljö, begränsa åtkomsten till certifikatfilen och hämta dess lösenord från en hemlig lagring eller en annan skyddad konfigurationskälla. Exemplen nedan använder en miljövariabel enbart för att undvika att låsa in lösenordet i koden.
Lägg till en digital signatur i en presentation
För att signera ett riktigt presentationsarbetsflöde, ladda en befintlig PPTX‑fil, skapa en DigitalSignature från ett PFX‑certifikat och dess lösenord, lägg till signaturen i presentationens samling och spara till en PPTX‑fil.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
import os
from asposeslides.api import Presentation, DigitalSignature, SaveFormat
certificate_password = os.environ.get("PFX_PASSWORD")
if not certificate_password:
print("Set the PFX_PASSWORD environment variable.")
else:
presentation = Presentation("InputPresentation.pptx")
try:
signature = DigitalSignature("signing-certificate.pfx", certificate_password)
signature.setComments("Approved for release.")
presentation.getDigitalSignatures().add(signature)
presentation.save("InputPresentation-signed.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Att spara resultatet under ett nytt namn bevarar den osignerade källfilen. Värdet som sätts av DigitalSignature.setComments beskriver signaturens syfte; det är inte en säkerhetskontroll.
Validera digitala signaturer
När du laddar en signerad PPTX‑fil, inspektera varje objekt som returneras av Presentation.getDigitalSignatures. Metoden DigitalSignature.isValid visar om den inbäddade signaturen är giltig för det aktuella presentationsinnehållet.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
ByteArrayInputStream = jpype.JClass("java.io.ByteArrayInputStream")
CertificateFactory = jpype.JClass("java.security.cert.CertificateFactory")
SimpleDateFormat = jpype.JClass("java.text.SimpleDateFormat")
presentation = Presentation("InputPresentation-signed.pptx")
try:
signatures = presentation.getDigitalSignatures()
signature_count = signatures.size()
if signature_count == 0:
print("The presentation does not contain digital signatures.")
else:
all_signatures_are_valid = True
sign_time_format = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
certificate_factory = CertificateFactory.getInstance("X.509")
for signature in signatures:
signature_is_valid = signature.isValid()
signature_status = "VALID" if signature_is_valid else "INVALID"
sign_time = signature.getSignTime()
formatted_sign_time = sign_time_format.format(sign_time)
certificate_data = signature.getCertificate()
certificate_stream = ByteArrayInputStream(certificate_data)
certificate = certificate_factory.generateCertificate(certificate_stream)
signer_principal = certificate.getSubjectX500Principal()
signer_name = signer_principal.getName()
print(f"{signer_name}, {formatted_sign_time} -- {signature_status}")
all_signatures_are_valid = all_signatures_are_valid and signature_is_valid
if all_signatures_are_valid:
print("All embedded signatures are valid for the current presentation.")
else:
print("At least one embedded signature is invalid.")
finally:
presentation.dispose()
Ett ogiltigt resultat betyder vanligtvis att det signerade presentationsinnehållet eller signaturdata har ändrats efter signering, eller att filen är skadad. Att ta bort alla signaturer skapar en osignerad presentation, så att bara kontrollera giltigheten för objekt är inte tillräckligt: ett säkerhetskänsligt arbetsflöde måste också verifiera att förväntat antal signaturer och förväntade signataridentiteter finns.
Detta giltighetsresultat bör inte betraktas som ett fullständigt beslut om certifikatförtroende. Beroende på din säkerhetspolicy kan din applikation även behöva bygga och validera X.509‑certifikatkedjan, kontrollera certifikatens giltighetsdatum och återkallningsstatus, bekräfta förväntad ämnesnamn eller fingeravtryck, verifiera nyckelanvändning och utvärdera en betrodd tidsstämpel. Värdet från DigitalSignature.getSignTime i sig är inte bevis från en betrodd tidsstämplingsmyndighet.
Ta bort digitala signaturer
Att ta bort signaturer förändrar presentationens säkerhetstillstånd. Följande exempel laddar en signerad PPTX‑fil, tar bort alla signaturer med DigitalSignatureCollection.clear, och sparar en osignerad kopia.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation("InputPresentation-signed.pptx")
try:
presentation.getDigitalSignatures().clear()
presentation.save("InputPresentation-unsigned.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
För att ta bort endast en signatur, anropa DigitalSignatureCollection.removeAt med dess nollbaserade index. Spara till en ny fil såvida du inte avsiktligt skriver över den signerade originalfilen som en del av ditt arbetsflöde.
Redigering och formatöverväganden
- En signatur gör inte en presentation skrivskyddad. Användare och applikationer kan fortfarande redigera filen, men ändringar i signerat innehåll gör vanligtvis den befintliga signaturen ogiltig.
- Slutför alla avsedda redigeringar innan signering. Om en presentation måste ändras, spara den reviderade presentationen och signera den revisionen igen.
- Behåll slutresultatet i PPTX‑format. Att konvertera en signerad presentation till ett annat format överför inte den ursprungliga PPTX‑signaturen som en giltig signatur för den konverterade filen.
- Behandla certifikatets privata nyckel som känslig. Alla som får tag på den privata nyckeln och dess lösenord kan skapa signaturer som ser ut att komma från certifikatinnehavaren.
- Behåll den osignerade källan eller en annan kontrollerad kopia när din dokumentretentionspolicy kräver det.
Vanliga frågor
Krypterar en digital signatur presentationen?
Nej. En digital signatur ger bevis om ursprung och integritet, men presentationsinnehållet förblir läsbart om inte separat kryptering tillämpas. Använd lösenordsskydd när åtkomst till innehållet måste begränsas.
Är PFX‑lösenordet detsamma som ett presentationslösenord?
Nej. PFX‑lösenordet låser upp den privata nyckeln som lagras i certifikatpaketet. Det styr inte vem som kan öppna eller redigera PPTX‑filen.
Kan jag använda ett självsignerat certifikat?
Tekniskt sett kan ett självsignerat certifikat användas när det innehåller en åtkomlig privat nyckel. Mottagare kommer dock inte automatiskt att lita på det, såvida inte certifikatet explicit har lagts till i deras betrodda miljö. Offentliga eller tvärorganisationsarbetsflöden använder vanligtvis ett certifikat utfärdat av en betrodd CA.
Vad gör en signatur ogiltig?
Att ändra det signerade presentationsinnehållet eller signaturdata efter signering kan göra signaturen ogiltig. Filkorruption kan också leda till att valideringen misslyckas. Om alla signaturer tas bort är presentationen osignerad snarare än en fil som innehåller en ogiltig signatur.
Betyder en giltig signatur att jag bör lita på signatören?
Inte i sig. Signaturens integritet och signatörens förtroende är separata beslut. En produktionsvalideringspolicy bör också kontrollera certifikatkedjan, giltighetsperioden, återkallningsstatus, förväntad identitet, nyckelanvändning och eventuella krav på betrodda tidsstämplar.
Vad händer när certifikatet går ut?
Certifikatets utgång ändrar inte presentationsbytes, men det påverkar utvärderingen av certifikatförtroendet. Om en signatur förblir acceptabel beror på din policy och på om en giltig betrodd tidsstämpel bevisar att signeringen skedde medan certifikatet var giltigt. Lita inte enbart på den visade signeringstiden som en betrodd tidsstämpel.
Kan en signerad presentation fortfarande redigeras?
Ja. Signering låser inte filen. Att redigera signerat innehåll gör vanligtvis den befintliga signaturen ogiltig, så slutför presentationen först och signera den slutgiltiga revisionen.
Kan en presentation innehålla mer än en signatur?
Ja. Lägg till varje signatur i samlingen som returneras av Presentation.getDigitalSignatures innan du sparar. Vid validering, inspektera varje signatur och bekräfta att alla erforderliga signatörer finns.
Vilka presentationsformat stöder dessa operationer?
Aspose.Slides stöder de digitala signatur‑operationer som beskrivs här endast för PPTX. PPT‑ och OpenDocument‑presentationsformat stöds inte av detta API‑arbetsflöde.
Kan jag ta bort en signatur utan att påverka bilderna?
Ja. Du kan ta bort en signatur eller rensa hela samlingen och sedan spara presentationen. Bildinnehållet förblir tillgängligt, men den sparade filen bär inte längre den borttagna signaturinformationen.