Enterprise sürüm
eIDAS güvence seviyeleri
Bir bakışta
“Bir bakışta” başlıklı bölümNextPDF Enterprise, AB güvenilir liste kanıtlarını açık bir eIDAS güvence seviyesine (LoA) dönüştürür. NextPDF\Enterprise\Security\Eidas\LoaMapping hizmeti, bir güven hizmeti girdisini Low, Substantial veya High olarak sınıflandırır. Seviyeyi ve makine tarafından okunabilir gerekçe kodlarını taşıyan bir LoaAssertion döndürür. İş akışınız güvence üzerinden geçit uygulayabilir — “High gerektir” — ve gerekçeleri denetim kanıtı olarak arşivleyebilir. Yardımcı bir koruma olan CertPiiGuard, denetim kayıtları süreçten ayrılmadan önce imzalayan kimlik alanlarını gizler.
İki sınır bu yeteneği dürüstçe çerçeveler. İlk olarak, nitelik her zaman üye devlet denetimindeki güven hizmeti sağlayıcısına (TSP) aittir. NextPDF, yayımlanan kanıtlar üzerinde bir sınıflandırma iddia eder; niteliği asla vermez, sağlamaz veya sertifikalandırmaz. İkinci olarak, bu sayfa yalnızca LoA iddiasını ve eşlemesini kapsar. Geçme/başarısız olma kriterleri dâhil olmak üzere yapısal PAdES politikası eidasQualified(), Doğrulama bölümünde belgelenmiştir.
Kullanılabilirlik ve lisanslama
“Kullanılabilirlik ve lisanslama” başlıklı bölümBu yetenek NextPDF Enterprise (nextpdf/enterprise) ile birlikte gelir ve bir Enterprise katmanı lisans zarfıyla etkinleşir. Bu yetkilendirme olmadan yapılan bir dağıtım, yeteneğin sınıflarını yüklemez. Sürümleri karşılaştırın ve bir lisans edinin.
Kurulum
“Kurulum” başlıklı bölümcomposer require nextpdf/enterprisenextpdf/premium metapaketi de Enterprise paketini çözümler. Etkinleştirme Enterprise lisans zarfınızı kullanır; bkz. Lisanslama ve etkinleştirme. eIDAS sınıfları, motor temel gereksinimlerinin ötesinde herhangi bir PHP uzantısına ihtiyaç duymaz. NextPDF\Enterprise\Security\Eidas ve NextPDF\Enterprise\Signature\Eidas altında otomatik yüklenirler.
Kavramsal genel bakış
“Kavramsal genel bakış” başlıklı bölümRegulation (EU) No 910/2014 (eIDAS) üç güvence seviyesi tanımlar: düşük, önemli ve yüksek (Article 8(1)). Her seviye, iddia edilen bir kimliğe olan güven derecesini ifade eder. Yüksek seviye, amacı kimlik kötüye kullanımını veya değiştirilmesini yalnızca azaltmak değil, önlemek olan kontroller ekler (Article 8(2)(c)). Article 8 bu seviyeleri elektronik kimlik doğrulama şemaları için tanımlar. NextPDF, bir imzalama sertifikasının arkasındaki güven hizmeti kanıtını sınıflandırmak için aynı sözcük dağarcığını yeniden kullanır. Bu yeniden kullanım, politika geçidi ve denetim için bir mühendislik uzlaşımıdır, yasal bir eşdeğerlik değil.
LoaLevel enumu üç seviyeyi modeller. Destekleyici değerleri, çıplak etiketler yerine eIDAS LoA URI’leridir, böylece kalıcılaştırılmış bir iddia tam tanımlayıcıyı taşır. rank() bir tam sıralama verir (Low = 1, Substantial = 2, High = 3) ve meetsOrExceeds() gerekli bir taban değerine karşı karşılaştırır.
LoaMapping, bir güvenilir liste girdisinden — Enterprise güvenilir liste alt sisteminden (NextPDF\Enterprise\Security\Tsl) gelen bir TspService’ten — bir seviye hesaplar. Eşleme deterministiktir:
| Güvenilir liste kanıtı | Seviye | Gerekçe kodları |
|---|---|---|
| Hizmet durumu granted değil | Low | service_not_granted |
Hizmet türü CA/QC değil | Low | service_not_qualified_ca |
QCWithQSCD ile ve QCNoQSCD olmadan verilmiş (granted) CA/QC | High | ca_qc_with_qscd artı esig_or_eseal veya qc_default |
Aksi hâlde verilmiş (granted) CA/QC | Substantial | ca_qc_no_qscd_or_unspecified |
QSCD (nitelikli imza oluşturma aygıtı) niteleyicisi eksen noktasıdır. Article 3(12) uyarınca, nitelikli bir elektronik imza hem nitelikli bir sertifika hem de nitelikli bir oluşturma aygıtı gerektirir. Sertifikaların bir QSCD üzerinde yönetildiğini belirten bir güvenilir liste ifadesi bu nedenle bir High iddiasını destekleyen kanıttır. Bu ifade olmadan, verilmiş bir nitelikli CA yine de Substantial’ı destekler, asla High’ı değil.
Sonuç bir LoaAssertion’dır: seviye artı bir gerekçe kodları listesi. Gerekçeler, bir denetim tüketicisinin sınıflandırmayı aynı kanıttan daha sonra yeniden türetmesine olanak tanır. Aşağı akış politika değerlendiricileri, iddiayı bir imza doğrulama sonucuyla birlikte kaydedebilir.
Bu modülde bir parça daha gelir: CertPiiGuard. Doğrulama yapıları JSON denetim paketlerine serileştirildiğinde, imzalayan sertifikası kişisel veri taşır — Subject CN, e-posta öznitelikleri ve gerçek kişiler için ulusal bir tanımlayıcıyı kodlayabilen serialNumber özniteliği. GDPR Article 5(1)(c), işlemenin gerekli olanla sınırlı olmasını gerektirir. Bu nedenle koruma, yapısal zarfı (kuruluş, ülke, zincir ve durum alanları) korurken değerleri [REDACTED] ile değiştirerek bu alanları varsayılan olarak gizler. Tüketiciler yine de bir imzanın kim tarafından imzalandığını öğrenmeden geçip geçmediğini doğrulayabilir.
Neden bu şekilde çalışıyor
“Neden bu şekilde çalışıyor” başlıklı bölümYük taşıyan karar, güvence iddiasını doğrulama kararından ayırmaktır. İmza doğrulama, ETSI EN 319 102-1 uyarınca bir durum belirtimiyle sonlanır — TOTAL-PASSED, TOTAL-FAILED veya INDETERMINATE — ve bu karar doğrulama katmanına aittir. LoA eşlemesi, çıplak bir etiket yerine gerekçe kodlarıyla, güvenilir liste kanıtı üzerinde ayrı ve yeniden oynatılabilir bir sınıflandırmadır. Bu, NextPDF’in bir güvence iddiasını asla bir doğrulama sonucu olarak veya bir doğrulama sonucunu bir nitelik verilmesi olarak sunmamasını sağlar. Ayrıca eşlemeyi yapısı gereği tutucu yapar: eksik veya belirsiz kanıt seviyeyi düşürür, asla yükseltmez.
Tasarım arka planı: Nitelikli imzalar açıklandı.
API yüzeyi
“API yüzeyi” başlıklı bölümAşağıdaki tüm semboller nextpdf/enterprise 3.1.0’da genel API’dir.
LoaLevel
“LoaLevel” başlıklı bölümenum LoaLevel: string{ case Low = 'http://eidas.europa.eu/LoA/low'; case Substantial = 'http://eidas.europa.eu/LoA/substantial'; case High = 'http://eidas.europa.eu/LoA/high';
public function rank(): int
public function meetsOrExceeds(self $required): bool}Şununla fırlatır veya başarısız olur: rank() veya meetsOrExceeds()’ten hiçbir şey. LoaLevel::from() ile yerel enum oluşturma, tanınmayan bir URI’de \ValueError fırlatır; LoaLevel::tryFrom() ise bunun yerine null döndürür.
LoaMapping
“LoaMapping” başlıklı bölümfinal class LoaMapping{ public function loaForService(TspService $service): LoaAssertion}Şununla fırlatır veya başarısız olur: hiçbir şey. Metot bütüncüldür — her TspService girdisi bir LoaAssertion verir.
Girdi DTO’ları NextPDF\Enterprise\Security\Tsl\TspService ve NextPDF\Enterprise\Security\Tsl\TspServiceQualifier kararlı genel DTO’lardır (@api). Eşleme, TspService::STATUS_GRANTED, TspService::TYPE_CA_QC ve TspServiceQualifier::QSCD_STATEMENT (QCWithQSCD), TspServiceQualifier::NO_QSCD (QCNoQSCD), TspServiceQualifier::FOR_ESIG ve TspServiceQualifier::FOR_ESEAL niteleyici sabitlerini danışır.
LoaAssertion
“LoaAssertion” başlıklı bölümfinal readonly class LoaAssertion{ /** * @param list<non-empty-string> $reasons Machine-readable reason codes for the assertion. */ public function __construct( public LoaLevel $level, public array $reasons, ) {}}Şununla fırlatır veya başarısız olur: hiçbir şey. Değişmez değer nesnesi.
CertPiiGuard
“CertPiiGuard” başlıklı bölümfinal readonly class CertPiiGuard{ public function __construct( private bool $disclosePii = false, ) {}
public function disclosesPii(): bool
public function guardSignerCommonName(string $signer): string
public function guardDistinguishedName(string $dn): string
public function guardTsaName(string $tsaName): string
public function guardRootIssuer(string $issuer): string
public function guardChainIssue(string $issue): string}Şununla fırlatır veya başarısız olur: hiçbir şey. Korumalar saf dize dönüşümleridir. Güvenle belirteçlere ayrılamayan bir DN bileşeninde, koruma kapalı-başarısız olur ve kısmen maskelenmiş bir değer yaymak yerine bileşeni [REDACTED]’a indirger.
Kod örneği — Hızlı başlangıç
“Kod örneği — Hızlı başlangıç” başlıklı bölümBir LoA URI’sini ayrıştırın ve gerekli bir taban değerine karşı karşılaştırın.
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Enterprise\Security\Eidas\LoaLevel;
// A LoA URI as persisted in an audit record or received from a peer system.$uri = 'http://eidas.europa.eu/LoA/substantial';
try { $level = LoaLevel::from($uri);} catch (\ValueError $e) { // Unknown URI: refuse to classify. Never guess an assurance level. echo "Unrecognized LoA URI: {$uri}\n"; exit(1);}
echo 'Level: ' . $level->name . ' (rank ' . $level->rank() . ")\n";echo 'Meets substantial: ' . ($level->meetsOrExceeds(LoaLevel::Substantial) ? 'yes' : 'no') . "\n";echo 'Meets high: ' . ($level->meetsOrExceeds(LoaLevel::High) ? 'yes' : 'no') . "\n";Beklenen çıktı:
Level: Substantial (rank 2)Meets substantial: yesMeets high: noKod örneği — Üretim
“Kod örneği — Üretim” başlıklı bölümBir güvenilir liste girdisini sınıflandırın, gerekli bir seviye üzerinden geçit uygulayın ve gizlenmiş bir denetim kaydı yayın.
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Enterprise\Security\Eidas\LoaLevel;use NextPDF\Enterprise\Security\Eidas\LoaMapping;use NextPDF\Enterprise\Security\Tsl\TspService;use NextPDF\Enterprise\Security\Tsl\TspServiceQualifier;use NextPDF\Enterprise\Signature\Eidas\CertPiiGuard;
// Normally produced by the Enterprise trusted-list subsystem from a// member-state TSL; constructed inline here for a self-contained example.$caPem = (string) file_get_contents(__DIR__ . '/example-qc-ca.pem');
$service = new TspService( tspName: 'Example Qualified TSP', serviceName: 'Example Qualified CA G2', serviceTypeIdentifier: TspService::TYPE_CA_QC, serviceStatus: TspService::STATUS_GRANTED, statusStartingTime: '2024-01-01T00:00:00Z', serviceCertificatePem: $caPem, qualifiers: [ new TspServiceQualifier(qualifierUri: TspServiceQualifier::QSCD_STATEMENT), new TspServiceQualifier(qualifierUri: TspServiceQualifier::FOR_ESIG), ], additionalServiceInformation: [],);
try { // Required floor from deployment configuration; defaults to High. $required = LoaLevel::from(getenv('LOA_REQUIRED') ?: LoaLevel::High->value);} catch (\ValueError $e) { echo "Invalid LOA_REQUIRED URI; refusing to continue.\n"; exit(1);}
$mapping = new LoaMapping();$assertion = $mapping->loaForService($service);
// Privacy by default: signer identity fields are redacted in audit output.$guard = new CertPiiGuard();
$audit = [ 'loa' => $assertion->level->value, 'reasons' => $assertion->reasons, 'meets_required' => $assertion->level->meetsOrExceeds($required), 'signer' => $guard->guardSignerCommonName('CN=Jane Example, O=Example Corp, C=DE'),];
echo json_encode($audit, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n";Beklenen çıktı:
{ "loa": "http://eidas.europa.eu/LoA/high", "reasons": [ "ca_qc_with_qscd", "esig_or_eseal" ], "meets_required": true, "signer": "CN=[REDACTED], O=Example Corp, C=DE"}Sınır durumları ve tuzaklar
“Sınır durumları ve tuzaklar” başlıklı bölümLoaLevel::from(), bilinmeyen URI’lerde\ValueErrorfırlatır.nullişlemenin tercih edildiği yerlerdeLoaLevel::tryFrom()kullanın.- Çelişkili aygıt kanıtı tutucu kalır. Hem
QCWithQSCDhem deQCNoQSCDtaşıyan bir hizmet,High’a değilSubstantial’a eşlenir. - Niteleyicisi olmayan, verilmiş (granted) bir
CA/QChizmeti,ca_qc_no_qscd_or_unspecifiedgerekçesiyleSubstantial’a eşlenir — varsayılan olarak nitelikli, aygıt kanıtlanmamış. - İzlenen kümenin dışındaki niteleyici URI’leri sınıflandırmayı etkilemez. Bilinmeyen veya gelecekteki niteleyiciler seviyeyi asla yükseltmez.
- Eşleme yalnızca geçerli hizmet durumunu okur.
statusStartingTimegeçmişini değerlendirmez; belirli-zaman pencereleri doğrulama katmanına aittir. rank()tamsayısını değil, enumun destekleyici URI’sini kalıcılaştırın. Sıralamalar yalnızca karşılaştırma için vardır.CertPiiGuard,=içermeyen çıplak bir adı tamamen[REDACTED]’a indirger; boş dizeler tüm korumalardan değişmeden geçer.- Eski OpenSSL eğik çizgiyle ayrılmış DN’ler algılanır ve yapısal olarak maskelenir. Bir RFC 4514 değeri içindeki
/, ayırıcı olarak değil içerik olarak ele alınır. - PII olmayan DN öznitelikleri (
O,OU,C,ST,L) korunur, böylece yargı yetkisi muhakemesi gizleme sonrasında hayatta kalır.
Güvenlik notları
“Güvenlik notları” başlıklı bölüm- Varsayılan olarak gizlilik. Koruma yapıcısı varsayılan olarak
disclosePii: false’tur.new CertPiiGuard(disclosePii: true)’i yalnızca imzalayan kimliğini işlemek için belgelenmiş yasal bir dayanağa sahip olduğunuz yerde oluşturun. Bu, GDPR Article 5(1)(c) veri minimizasyonunu serileştirme sınırında uygular. - Kapalı-başarısız gizleme. Bir DN bileşeni güvenle belirteçlere ayrılamadığında, tüm bileşen
[REDACTED]’a indirgenir. Bir gizlilik kontrolü asla açık-başarısız olmaz. - Deterministik çıktı. Korumalar saf dize işleme kullanır — saat yok, rastgelelik yok — böylece maskelenmiş çıktı, aynı girdi için bayt kararlıdır. Kararlı çıktı, denetim farklarını anlamlı tutar.
- Gizleme şifreleme değildir.
[REDACTED], değeri kayıttan kaldırır. Kimliğin kurtarılabilir olmasına ihtiyacınız varsa, onu kendi yasal dayanağı ve erişim kontrolü altında ayrı olarak saklayın. - Çöp girer, çöp çıkar. Bir
LoaAssertion, yalnızca arkasındaki güvenilir liste kanıtı kadar güvenilirdir. Girdileri eşlemeye vermeden önce güvenilir listeleri Enterprise güvenilir liste alt sistemi aracılığıyla edinin ve imza denetiminden geçirin.
Uygunluk
“Uygunluk” başlıklı bölümNextPDF Enterprise, Regulation (EU) No 910/2014 Article 8 (güvence seviyeleri) ve Article 3(12) (nitelikli bir elektronik imzanın öğeleri) tarafından ve ETSI güvenilir liste niteleyici sözcük dağarcığı tarafından bilgilendirilen davranışı uygular. Destek uygunluk değildir ve uygunluk sertifikasyon değildir. NextPDF hiçbir sertifikasyona sahip değildir ve hiçbirini vermez. NextPDF nitelikli bir güven hizmeti sağlayıcısı, bir uygunluk değerlendirme kuruluşu ve bir denetim kuruluşu değildir. Bir LoaAssertion, yayımlanan kanıtın bir yazılım sınıflandırmasıdır. Nitelik veya güvence hakkında yasal bir belirleme değildir ve bir imzayı nitelikli yapamaz.
Regulation (EU) 2024/1183 (eIDAS 2), Article 8 seviyelerine atıfta bulunmaya devam eder ve European Digital Identity Wallet’ların güvence seviyesi yüksek olarak sağlanmasını gerektirir. Bu sayfa bunu düzenleyici bağlam olarak alıntılar; NextPDF cüzdanla ilgili herhangi bir yetenek iddiasında bulunmaz.
Belirli bir imzanın yapısal, eIDAS odaklı bir politikayı karşılayıp karşılamadığı ayrı bir sorudur ve doğrulama modülü tarafından yanıtlanır; bkz. Doğrulama.
FIPS-modu davranışı
“FIPS-modu davranışı” başlıklı bölümeIDAS LoA sınıfları hiçbir kriptografik işlem gerçekleştirmez — özetleme yok, imza doğrulama yok, rastgelelik yok. Enterprise FIPS-modu politikası kriptografik seçimlere geçit uygular, bu nedenle bu modülde geçit uygulayacağı hiçbir şey yoktur. FIPS modunu etkinleştirmek LoA eşlemesini veya PII-koruma davranışını değiştirmez. İmzaların ve güvenilir listelerin kriptografik doğrulaması, FIPS-modu politikasının geçerli olduğu doğrulama ve güvenlik modülleri tarafından yönetilir.
Davranış sözleşmesi
“Davranış sözleşmesi” başlıklı bölümLoaMapping::loaForService()bütüncül ve deterministiktir. HerTspServicebirLoaAssertionverir; metot asla fırlatmaz ve hiçbir saat, ağ veya global duruma danışmaz.- Sınıflandırma tutucudur. Eksik, bilinmeyen veya çelişkili kanıt seviyeyi düşürür; açık verilmiş-
CA/QC-QSCD-ile kanıtı dışında hiçbir şey seviyeyi yükseltmez. - Gerekçe kodları makine tarafından okunabilir ve kararlıdır:
service_not_granted,service_not_qualified_ca,ca_qc_with_qscd,esig_or_eseal,qc_default,ca_qc_no_qscd_or_unspecified. - Seviye sırası sabittir:
Low<Substantial<High,rank()vemeetsOrExceeds()aracılığıyla açığa çıkarılır. CertPiiGuardvarsayılan olarak gizlemeye ayarlıdır ve belirteçlere ayırma şüphesinde kapalı-başarısız olur.disclosePii: trueile her koruma girdisini olduğu gibi döndürür.- Koruma çıktısı aynı girdi için bayt kararlıdır.
Core geri dönüşü
“Core geri dönüşü” başlıklı bölümNextPDF Core, PDF imzalarını kriptografik olarak doğrular ve bozuk kanıtta kapalı-başarısız olur. Core’da AB güvenilir liste modeli, LoaLevel sözcük dağarcığı, LoA eşlemesi ve denetim serileştirmesi için eIDAS katmanı PII koruması yoktur. Yalnızca Core ile, güvence sınıflandırmalarını sürdürdüğünüz güven verilerinden kendiniz türetmeniz ve denetim kayıtları süreçten ayrılmadan önce kendi gizlemenizi uygulamanız gerekir.
Yayımlama sınırı
“Yayımlama sınırı” başlıklı bölümBu sayfa yalnızca dışarıdan gözlemlenebilir davranışı ve desteklenen genel API yüzeyini belgeler. İç ad alanı yolları, yardımcı sınıflar, mekanizma tabloları, çalışma kılavuzu dosya adları ve bilet önekleri kapsam dışıdır.
Ayrıca bakınız
“Ayrıca bakınız” başlıklı bölüm- Doğrulama —
eidasQualified()semantiği ve geçme/başarısız kriterleri dâhil olmak üzere yapısal uygunluk politikaları - İmza doğrulama — PII korumasının raporlarını koruduğu AdES/PAdES kriptografik doğrulama tarafı
- Güvenlik — Derin Referans — Güvenlik modülünün derin referansı
- Nitelikli imzalar açıklandı — Nitelik ve güvence üzerine Insider makalesi
- Bir imza kimin imzaladığını nasıl kanıtlar — Doğrulama tarafı güveni üzerine Insider makalesi