# Lägg till digitala signaturer i presentationer i Python

> Lär dig hur du signerar befintliga PPTX‑presentationer med PFX‑certifikat och använder Aspose.Slides för Python via Java för att validera eller ta bort digitala signaturer.

Source: https://docs.aspose.com/slides/sv/python-java/digital-signature-in-powerpoint/
Updated: 2026-09-14

## **Ö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](/slides/sv/python-java/password-protected-presentation/).

PowerPoint tillhandahåller kommandot **Add a Digital Signature** under **File > Info > Protect Presentation**.

![PowerPoint-menyn Skydda presentation med Add a Digital Signature markerad](add-digital-signature-in-powerpoint.png)

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

![PowerPoint-notifiering som visar att presentationen innehåller giltiga signaturer](digital-signature-status-in-powerpoint.png)

Aspose.Slides exponerar signaturer via [Presentation.getDigitalSignatures](https://reference.aspose.com/slides/sv/python-java/aspose.slides/presentation/#getDigitalSignatures), vilket returnerar en [DigitalSignatureCollection](https://reference.aspose.com/slides/sv/python-java/aspose.slides/digitalsignaturecollection/) vars objekt är instanser av [DigitalSignature](https://reference.aspose.com/slides/sv/python-java/aspose.slides/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](https://reference.aspose.com/slides/sv/python-java/aspose.slides/digitalsignature/) från ett PFX‑certifikat och dess lösenord, lägg till signaturen i presentationens samling och spara till en PPTX‑fil.

```python
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](https://reference.aspose.com/slides/sv/python-java/aspose.slides/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](https://reference.aspose.com/slides/sv/python-java/aspose.slides/presentation/#getDigitalSignatures). Metoden [DigitalSignature.isValid](https://reference.aspose.com/slides/sv/python-java/aspose.slides/digitalsignature/#isValid) visar om den inbäddade signaturen är giltig för det aktuella presentationsinnehållet.

```python
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](https://reference.aspose.com/slides/sv/python-java/aspose.slides/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](https://reference.aspose.com/slides/sv/python-java/aspose.slides/digitalsignaturecollection/#clear), och sparar en osignerad kopia.

```python
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](https://reference.aspose.com/slides/sv/python-java/aspose.slides/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](/slides/sv/python-java/password-protected-presentation/) 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](https://reference.aspose.com/slides/sv/python-java/aspose.slides/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.
