Python içinde PDF Güvenlik İmzaları Nasıl Eklenir

Python içinde PDF Güvenlik İmzaları Nasıl Eklenir

Aspose.PDF FOSS for Python, zaten imzalanmış bir PDF’yi belirli bir müdahale kalıbı için inceler: bir imzanın imzalı bayt aralığının sonuna eklenen anlamlı baytlar, bu yalnızca artımlı güncellenen PDF dosyalarında görülen bir risk. Bu kılavuz, SignaturesCompromiseDetector ve CompromiseCheckResult sınıflarını kullanarak bu kontrolü bir Python iş akışına ekler. Yeni dijital imzalar oluşturmak veya uygulamak kütüphanenin ayrı bir bölümü olup burada ele alınmaz. Kütüphane aşağıdaki komutla kurulmaktadır.

Adım Adım Kılavuz

Adım 1: Paketi Yükleyin

Aspose.PDF FOSS paketini kurun:

git clone https://github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python.git
cd Aspose-PDF-FOSS-for-Python
pip install -e .

Kurulumu doğrulamak için SignaturesCompromiseDetector‘i içe aktarın ve bir onay mesajı yazdırın:

from aspose_pdf import SignaturesCompromiseDetector
print("aspose-pdf-foss-for-python is ready.")

Adım 2: Gerekli Sınıfları İçe Aktar

from aspose_pdf import CompromiseCheckResult, SignaturesCompromiseDetector

Adım 3: İmzalar Listesini Açığa Çıkaran Bir Nesne Hazırla

SignaturesCompromiseDetector, PDF’i kendisi ayrıştırmaz — yapıcı signatures özniteliğini açığa çıkaran herhangi bir nesneyi kabul eder: bir imza girişi listesi, her biri valid, byte_range ve reference_data taşır. PdfSignature — basit, doğrudan oluşturulabilir bir sınıf — bu şekle uyar, bu yüzden kendi belge nesnenize bağlamadan önce kontrolün nasıl davrandığını görmek için faydalıdır:

from types import SimpleNamespace
from aspose_pdf import PdfSignature

with open("signed.pdf", "rb") as handle:
    pdf_bytes = handle.read()

signature = PdfSignature(
    name="Signature1",
    contents=b"...",  # PKCS#7 signed-data blob from the signature dictionary
    byte_range=[0, 1024, 1040, len(pdf_bytes) - 1040],
    reference_data=pdf_bytes,
)

signed_document = SimpleNamespace(signatures=[signature])

signed_document‘ı, aynı biçimde bir signatures listesi açığa çıkardığında kendi belge nesnenizle değiştirin — bu özniteliğe sahip herhangi bir nesne çalışır.


Adım 4: Uzlaşma Kontrolünü Çalıştır

from aspose_pdf import SignaturesCompromiseDetector

detector = SignaturesCompromiseDetector(signed_document)
result = detector.check()

print(result.compromised)                # bool
print(result.has_compromised_signatures)  # bool -- same value as compromised
print(result.signatures_coverage)         # int -- number of signatures inspected
print(result.reasons)                     # list[str] -- human-readable findings

check(), signed_document.signatures içindeki her imzayı dolaşır, her imzanın imzalı bayt aralığından sonra eklenmiş imzasız içeriği arar. Bir CompromiseCheckResult, sonucu özetler: compromised ve has_compromised_signatures, aynı boolean’ı iki farklı ad altında rapor eder, signatures_coverage, kaç imzanın incelendiğini bildirir ve reasons, bulunan her sorun için insan tarafından okunabilir bir açıklama listeler.


Adım 5: İmzası Olmayan Bir Belgeyi İşle

Boş veya eksik signatures listesi bir hata durumu değildir — kontrol edilecek bir şey olmayan bir belge gibi aynı şekilde raporlanır:

from types import SimpleNamespace
from aspose_pdf import SignaturesCompromiseDetector

unsigned_document = SimpleNamespace(signatures=[])
detector = SignaturesCompromiseDetector(unsigned_document)
result = detector.check()

print(result.compromised)  # False
print(result.reasons)      # ["unsigned document"]

SignaturesCompromiseDetector(None)‘ı geçirmek — yapıcının varsayılanı — aynı şekilde davranır.

Yaygın Sorunlar ve Çözümler

compromised is False imzalandıktan sonra düzenlendiği bilinen bir PDF için

SignaturesCompromiseDetector, bir imzanın imzalı bayt aralığından sonra eklenen imzasız baytları özellikle arar — naif artımlı güncelleme müdahalesine tipik bir desen. Tam kriptografik imza doğrulaması yapmaz. Bunun için, bireysel PdfSignature nesnesi üzerinde validate() çağırın.

compromised and has_compromised_signatures gereksiz görünüyor

Aynı değerdir: compromised, has_compromised_signatures‘i döndüren hesaplanmış bir özelliktir. Kodunuzda daha iyi okunan ismi kullanın.

Belge hiç … olmadığında istisna atılmaz signatures özelliği hiç

SignaturesCompromiseDetector belgesinde signatures özniteliği veya document=None bulunmayan bir belgeyi, imzasız belgeyle aynı şekilde ele alır — check(), bir hata yükseltmek yerine has_compromised_signatures=False ve reasons=["unsigned document"] içeren bir sonuç döndürür.

Bozuk bir PdfSignature işaretlenmez

check(), byte_range öğesi 4 elemanlı bir liste olmayan veya reference_data öğesi bytes/bytearray olmayan imzaları atlar, hatayı yükseltmek ya da bozulmuş olarak raporlamak yerine. Yanlış biçimde oluşturulmuş bir imza sessizce denetimden dışlanır, işaretlenmez.

Bu dedektörü imza oluşturmayla karıştırmak

SignaturesCompromiseDetector ve CompromiseCheckResult yalnızca bir belgede zaten mevcut olan imzaları inceler — yeni bir imza oluşturmak, uygulamak veya gömmek için bir yöntemleri yoktur.

Sıkça Sorulan Sorular

Burada tam olarak “bozulmuş” sayılan şey nedir?

Bir imzanın imzalanmış bayt aralığından sonra PDF’ye eklenen, anlamlı, boşluk olmayan baytlar — dedektörün zaten dikkate aldığı iki istisna ile: bu baytları kapsayan daha sonraki bir imza ya da zaman damgası ve yeni içerik (örneğin bir /DSS) eklemeden yalnızca doğrulama materyali ekleyen artımlı bir güncelleme.

Bu, imzanın kriptografik geçerliliğini kendisi doğruluyor mu?

Hayır. SignaturesCompromiseDetector, imzalı bayt aralığı etrafındaki müdahale kalıplarını kontrol eder. Kriptografik geçerlilik ayrı bir kontroldür ve PdfSignature.validate() aracılığıyla kullanılabilir.

signatures_coverage bana ne söylüyor?

Geçilen belgede kontrolün gerçekte incelediği imza sayısı — temiz bir sonuç güvenmeden önce dedektörün beklediğiniz imzaları gördüğünü doğrulamak için faydalıdır.

Birden fazla imzası olan bir belgeyi aynı anda kontrol edebilir miyim?

Evet. check(), signed_document.signatures içindeki her girdiyi yineleyerek hepsini kapsayan tek bir toplu CompromiseCheckResult döndürür.

Normal kullanımda PdfSignature nesnelerini kendim oluşturmak zorunda mıyım?

Hayır — 3. adımın PdfSignature oluşturulması, dedektörün davranışını doğrudan keşfetmek içindir. Gerçek bir iş akışında, belge-yükleme kodunuzun zaten ürettiği nesneyi geçirin, yeter ki signatures adlı bir PdfSignature biçimli giriş listesi sunsun.

Ayrıca Bakınız

 Türkçe