Mevcut bir imzayı inceleyin ve güven sınırını netleştirin
Bir bakışta
“Bir bakışta” başlıklı bölümPDF’de imza bulunup bulunmadığını saptamak için Core denetleyicisini kullanın ve güven sınırını net tutun. Varlık saptaması, doğrulama anlamına gelmez. Kriptografik doğrulama, güven yolu doğrulaması ve iptal denetimi Premium sürümlerin ya da harici bir doğrulayıcının sorumluluğundadır.
Ön koşullar
“Ön koşullar” başlıklı bölüm- Core kurulu olmalıdır:
composer require nextpdf/core:^3. - İncelenecek bir PDF dosyası.
- PDF baytlarını okuyun.
- Bir
Inspectoroluşturun veinspect()çağırın. - Şu değeri okuyun:
InspectResult::$hasSigned.true, dosyanın bir imza sözlüğü içerdiği anlamına gelir. - Çevreleyen bağlamı görmek için
InspectResult::$isEncrypteddeğerini ve risk bayraklarını okuyun. - Kriptografik karar için dosyayı bir doğrulayıcıya yönlendirin. Denetleyici, geçerliliği değil yalnızca varlığı bildirir.
Aşağıdaki şema sınırı gösterir: varlık, geçerlilik değildir. Gerçek bir doğrulayıcının yine de gerçekleştirmesi gereken denetimleri de gösterir.
Tam örnek
“Tam örnek” başlıklı bölüm<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Inspect\Inspector;use NextPDF\Inspect\InspectConfig;
$pdfData = file_get_contents(__DIR__ . '/incoming.pdf');if ($pdfData === false || $pdfData === '') { fwrite(STDERR, "Cannot read incoming.pdf\n"); exit(1);}
$inspector = new Inspector();
// InspectConfig::quick() selects InspectDepth::Quick. This is the only// depth that runs offline: a default Inspector has no Spectrum sidecar,// and without a sidecar Quick is the sole path that returns a result.// Standard and Full require the sidecar (see the SIDECAR-001 edge case).$result = $inspector->inspect( $pdfData, InspectConfig::quick(),);
// hasSigned reports the PRESENCE of a signature dictionary.// It does NOT mean the signature verifies.if ($result->hasSigned) { echo "A signature is present in incoming.pdf\n"; echo "Encrypted: " . ($result->isEncrypted ? 'yes' : 'no') . "\n"; echo "Next step: run a cryptographic verifier before trusting it.\n";} else { echo "No signature found in incoming.pdf\n";}Beklenen çıktı
“Beklenen çıktı” başlıklı bölümİmzalı bir girdi için:
A signature is present in incoming.pdfEncrypted: noNext step: run a cryptographic verifier before trusting it.İmzasız bir girdi için:
No signature found in incoming.pdfSınır durumları
“Sınır durumları” başlıklı bölüm- Varlık, geçerlilik değildir — sınır.
InspectResult::$hasSigned, dosyada bir imza sözlüğü bulunduğunu bildirir. Kriptografik Mesaj Sözdizimi (CMS) yapısını, bayt aralığı özetini, imzalama sertifikasını, sertifika zincirini veya iptal durumunu denetlemez. Tahrif edilmiş bir dosya yine dehasSigned = truebildirebilir. Varlığı asla bütünlük veya yazarlık kanıtı olarak değerlendirmeyin. - Tam doğrulamanın gerektirdikleri. Eksiksiz bir karar için bayt aralığı özetinin yeniden hesaplanıp karşılaştırılması (ISO 32000-2 §12.8.1), CMS SignedData yapısının doğrulanması, güvenilen bir köke giden X.509 yolunun oluşturulup denetlenmesi ve iptal durumunun Çevrimiçi Sertifika Durumu Protokolü (OCSP) ya da sertifika iptal listesi (CRL) aracılığıyla denetlenmesi gerekir. Uzun vadeli girdiler için doğrulama verileri Belge Güvenlik Deposu’nda (DSS) bulunur (ETSI EN 319 142-2 §6.3.1). Bu işlemler
SignerInterfaceveLtvManagerInterfacesözleşmelerinin arkasında çalışır; üretim uygulamaları Pro ve Enterprise sürümlerinde sunulur. Harici doğrulayıcı kullanmak desteklenen diğer yoldur. - İnceleme derinliği ve yan bileşen (SIDECAR-001). Varsayılan bir
new Inspector()nesnesinde yapılandırılmış Spectrum yan bileşeni yoktur. Yan bileşen olmadan yalnızcaInspectDepth::Quicksonuç döndürür.InspectDepth::Quick, süreç içi PHP yedeğini kullanır. HemInspectDepth::Standardhem deInspectDepth::Fullyan bileşeni gerektirir. Kullanılabilir bir yan bileşen yoksaInspectExceptionistisnasınıINSPECT-SIDECAR-001koduyla fırlatırlar (“Spectrum sidecar is required for Standard/Full depth inspection”,retryable = true).InspectConfigyapıcısının varsayılan derinliğiStandarddeğeridir. Bu nedenle çıplak birnew InspectConfig()(veyanew InspectConfig(depth: InspectDepth::Standard)) çevrimdışı kullanılamaz.hasSignedhenüz okunmadan SIDECAR-001 fırlatılır. Bu tarifte olduğu gibi, çevrimdışı varlık saptaması içinInspectConfig::quick()kullanın. Core’da hiçbir derinlik kriptografik imza doğrulaması gerçekleştirmez. - Boş girdi. Boş bir dize,
InspectExceptionistisnasınıINSPECT-INPUT-001koduyla fırlatır. Dosya okuma işlemini koruma altına alın. - Birden çok imza. Varlık bayrağı imzaları saymaz ya da bir onay imzasını belge zaman damgasından ayırt etmez. İmza sayısı ya da imza başına karar önemliyse özel bir doğrulayıcı kullanın.
Uyumluluk
“Uyumluluk” başlıklı bölüm| İfade | Spesifikasyon | Madde | reference_id |
|---|---|---|---|
İmza değeri, imza sözlüğünün Contents girdisinde saklanır. | ISO 32000-2 | §12.8.1 | |
Doğrulama, imza değerini dışarıda bırakarak özeti ByteRange üzerinde yeniden hesaplar. | ISO 32000-2 | §12.8.1 | |
| Uzun vadeli doğrulama verileri DSS’de bulunur. | ETSI EN 319 142-2 | §6.3.1 |
Bu tarif, yalnızca bir imzanın bulunup bulunmadığını saptar. Herhangi bir imzanın geçerli, güvenilir veya iptal edilmemiş olduğunu öne sürmez. Bu karar, bir kriptografik doğrulayıcıya aittir.