Python でプレゼンテーションにデジタル署名を追加する

デジタル証明書 は、パスワードで保護された PowerPoint プレゼンテーションを作成するために使用され、特定の組織または個人が作成したことを示します。デジタル証明書は、認可された組織(証明書機関)に連絡することで取得できます。システムにデジタル証明書をインストールした後、File -> Info -> Protect Presentation を使用してプレゼンテーションにデジタル署名を追加できます。

todo:image_alt_text

プレゼンテーションには複数のデジタル署名を含めることができます。デジタル署名がプレゼンテーションに追加されると、PowerPoint に特別なメッセージが表示されます。

todo:image_alt_text

プレゼンテーションに署名したり、署名の真正性を確認したりするには、Aspose.Slides APIIDigitalSignature インターフェイス、IDigitalSignatureCollection インターフェイス、そしてIPresentation.DigitalSignatures プロパティを提供します。現在、デジタル署名は PPTX 形式のみでサポートされています。

PFX 証明書からデジタル署名を追加

以下のコードサンプルは、PFX 証明書からデジタル署名を追加する方法を示しています。

  1. PFX ファイルを開き、PFX パスワードを DigitalSignature オブジェクトに渡します。
  2. 作成した署名をプレゼンテーション オブジェクトに追加します。

#[TODO:Exception] RuntimeError: プロキシエラー(FileNotFoundException): ファイルまたはアセンブリ 'System.Security.Cryptography.Xml, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' をロードできませんでした。ファイルが見つかりませんでした。

import aspose.slides as slides

with slides.Presentation() as pres:
    # PFX ファイルと PFX パスワードで DigitalSignature オブジェクトを作成
    signature = slides.DigitalSignature(path + "testsignature1.pfx", "testpass1")

    # デジタル署名にコメントを設定
    signature.comments = "Aspose.Slides digital signing test."

    # プレゼンテーションにデジタル署名を追加
    pres.digital_signatures.add(signature)

    # プレゼンテーションを保存
    pres.save("SomePresentationSigned.pptx", slides.export.SaveFormat.PPTX)

これで、プレゼンテーションがデジタル署名され、変更されていないかを確認できるようになりました。

# プレゼンテーションを開く
with slides.Presentation("SomePresentationSigned.pptx") as pres:
    if len(pres.digital_signatures) > 0:
        allSignaturesAreValid = True

        print("Signatures used to sign the presentation: ")
        # すべてのデジタル署名が有効か確認
        for signature in pres.digital_signatures :
            print(signature.certificate.subject_name.name + ", "
                    + signature.sign_time.strftime("yyyy-MM-dd HH:mm") + " -- " + "VALID" if signature.is_valid else "INVALID")
            allSignaturesAreValid = allSignaturesAreValid and signature.is_valid
        

        if allSignaturesAreValid:
            print("Presentation is genuine, all signatures are valid.")
        else:
            print("Presentation has been modified since signing.")

FAQ

ファイルから既存の署名を削除できますか?

はい。デジタル署名コレクションは、個々の項目の削除完全にクリア をサポートしています。ファイルを保存すると、プレゼンテーションに署名が残りません。

署名後にファイルは「読み取り専用」になりますか?

いいえ。署名は完全性と作成者情報を保持しますが、編集をブロックしません。編集を制限したい場合は、「読み取り専用」またはパスワード と組み合わせて使用してください。

異なるバージョンの PowerPoint で署名は正しく表示されますか?

署名は OOXML (PPTX) コンテナ用に作成されています。OOXML 署名をサポートする最新の PowerPoint バージョンは、署名のステータスを正しく表示します。