İçeriğe geç

Mevcut bir imzayı inceleyin ve güven sınırını netleştirin

PDF’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.

  • Core kurulu olmalıdır: composer require nextpdf/core:^3.
  • İncelenecek bir PDF dosyası.
  1. PDF baytlarını okuyun.
  2. Bir Inspector oluşturun ve inspect() çağırın.
  3. Şu değeri okuyun: InspectResult::$hasSigned. true, dosyanın bir imza sözlüğü içerdiği anlamına gelir.
  4. Çevreleyen bağlamı görmek için InspectResult::$isEncrypted değerini ve risk bayraklarını okuyun.
  5. 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.

false

true

Yes

No

Yes

No / unknown

Incoming PDF

Inspector.inspect — Quick

hasSigned?

No signature present

Signature dictionary PRESENT

NOT yet validity

Recompute byte-range digest

ISO 32000-2 §12.8.1

Validate CMS SignedData

Build & check X.509 path

to a chosen trust anchor

Check revocation OCSP / CRL

Long-term input?

Read DSS validation material

All checks evaluated

Every check passed?

Trustworthy

Not trusted — do not act

Diagram
<?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";
}

İmzalı bir girdi için:

A signature is present in incoming.pdf
Encrypted: no
Next step: run a cryptographic verifier before trusting it.

İmzasız bir girdi için:

No signature found in incoming.pdf
  • 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 de hasSigned = true bildirebilir. 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 SignerInterface ve LtvManagerInterface sö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ızca InspectDepth::Quick sonuç döndürür. InspectDepth::Quick, süreç içi PHP yedeğini kullanır. Hem InspectDepth::Standard hem de InspectDepth::Full yan bileşeni gerektirir. Kullanılabilir bir yan bileşen yoksa InspectException istisnasını INSPECT-SIDECAR-001 koduyla fırlatırlar (“Spectrum sidecar is required for Standard/Full depth inspection”, retryable = true). InspectConfig yapıcısının varsayılan derinliği Standard değeridir. Bu nedenle çıplak bir new InspectConfig() (veya new InspectConfig(depth: InspectDepth::Standard)) çevrimdışı kullanılamaz. hasSigned henüz okunmadan SIDECAR-001 fırlatılır. Bu tarifte olduğu gibi, çevrimdışı varlık saptaması için InspectConfig::quick() kullanın. Core’da hiçbir derinlik kriptografik imza doğrulaması gerçekleştirmez.
  • Boş girdi. Boş bir dize, InspectException istisnasını INSPECT-INPUT-001 koduyla 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.
İfadeSpesifikasyonMaddereference_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.