Błędy bezpieczeństwa i podpisywania
W skrócie
Dział zatytułowany „W skrócie”Ta strona dokumentuje wyjątki domeny bezpieczeństwa w drzewie przestrzeni nazw NextPDF\Security.
Każdy wpis podaje klasę, mówi, kiedy jest zgłaszana, wymienia
pola zwracane przez jej getContext() oraz podaje krok naprawczy.
Większość tych klas rozszerza SecurityException, który rozszerza NextPdfException
i implementuje ContextAwareExceptionInterface. Oznacza to, że getContext(): array
zwraca ustrukturyzowaną, wolną od sekretów diagnostykę, którą można kierować do logowania lub do
potoków monitorowania wydajności aplikacji (APM). Przechwyć SecurityException, aby
ująć każdą awarię domeny bezpieczeństwa w jednym bloku; przechwyć konkretną podklasę, gdy
potrzebujesz jej typowanego ładunku.
Kilka klas w tym drzewie rozszerza RuntimeException bezpośrednio, a nie
SecurityException. Są one oznaczone poniżej; nie udostępniają getContext(),
a większość jest udokumentowana jako wewnętrzne sygnały sterowania przepływem, których nie należy spodziewać się
przechwytywać w kodzie aplikacji.
Konwencja pól kontekstu
Dział zatytułowany „Konwencja pól kontekstu”| Aspekt | Zachowanie |
|---|---|
| Kontrakt bazowy | NextPdfException::getContext() zwraca []; podklasy go nadpisują. |
| Higiena sekretów | Komunikaty i kontekst pomijają surowy materiał klucza, tekst jawny, kody PIN oraz bajty wektora inicjującego (IV). Klucze są ujawniane wyłącznie jako prefiks odcisku palca. |
SecurityException | Baza abstrakcyjna; nie niesie własnych pól. Podklasy definiują ładunek. |
Typ bazowy
Dział zatytułowany „Typ bazowy”SecurityException
Dział zatytułowany „SecurityException”- Kiedy zgłaszany. Nigdy nie zgłaszany bezpośrednio; to baza abstrakcyjna dla
domeny bezpieczeństwa. Istnieje po to, by jeden blok
catch (SecurityException $e)mógł ująć awarie integralności szyfrowania uwierzytelnionego, obronę przed ponownym użyciem wartości jednorazowej (nonce), powiązanie PDF/A-z-szyfrowaniem, błędy zarządzania kluczami oraz awarie PKI. - Pola kontekstu. Żadnych własnych. Dziedziczy pustą wartość domyślną z
NextPdfException; podklasy wypełniają ładunek. - Naprawa. Przechwyć konkretną podklasę do możliwej do obsłużenia obsługi albo
SecurityExceptiondo zgrubnego kierowania incydentów bezpieczeństwa.
Błędy szyfrowania i szyfrowania uwierzytelnionego
Dział zatytułowany „Błędy szyfrowania i szyfrowania uwierzytelnionego”Są zgłaszane przez szyfrator AES-GCM (Galois/Counter Mode) oraz strażnika PDF/A. Aby uzyskać wskazówki zaczynające się od objawu, zobacz Szyfrowanie i uprawnienia.
DecryptionFailedException
Dział zatytułowany „DecryptionFailedException”- Kiedy zgłaszany. Odszyfrowywanie z szyfrowaniem uwierzytelnionym z powiązanymi danymi (AEAD) nie powiedzie się z przyczyny niezwiązanej z manipulacją: obcięty szyfrogram, brakujący IV albo nieprawidłowy klucz przekazany na granicy API, gdzie nie było wystarczająco dużo materiału, aby kontrola integralności mogła faktycznie zostać wykonana. To błąd konfiguracji lub transportu, a nie incydent bezpieczeństwa.
- Pola kontekstu.
algorithm(na przykładAES-256-GCM),reason(na przykładciphertext shorter than IV+tag). - Naprawa. Zweryfikuj, że szyfrogram, IV i klucz są kompletne i poprawnie
ujęte w ramki; nie traktuj tego jako manipulacji. Porównaj z
TamperedDataException.
TamperedDataException
Dział zatytułowany „TamperedDataException”- Kiedy zgłaszany. Znacznik uwierzytelniający AEAD nie przechodzi weryfikacji. Znacznik obejmuje
szyfrogram oraz powiązane uwierzytelnione dane (AAD); jeśli którekolwiek zostały zmodyfikowane
po zaszyfrowaniu, bazowe
openssl_decrypt()zwracafalse. Ten odrębny podtyp pozwala ujawnić alarm o randze incydentu bezpieczeństwa, a nie błąd tworzenia ramki. - Pola kontekstu.
algorithm,ciphertext_length(długość odrzuconego szyfrogramu, z wyłączeniem IV i znacznika). - Naprawa. Potraktuj jako manipulację lub nieprawidłowy klucz/IV. Nie ponawiaj na ślepo; zbadaj źródło szyfrogramu. Zgodnie z ISO/TS 32003:2023 §5.2 oraz NIST SP 800-38D §6.5 nieudana kontrola znacznika oznacza, że dane nie są autentyczne.
NonceReuseException
Dział zatytułowany „NonceReuseException”- Kiedy zgłaszany. AES-GCM zostaje poproszony o dwukrotne szyfrowanie tą samą parą klucza i IV. Szyfrator broni się licznikiem monotonicznym na instancję oraz, jako obrona w głąb, zbiorem haszującym (hash-set) w czasie wykonania każdej wyemitowanej pary (odcisk palca klucza, IV). Ponieważ licznik konstrukcyjnie wyklucza kolizje, to wystąpienie jest wskaźnikiem błędu o priorytecie krytycznym, który nigdy nie powinien wystąpić w produkcji. Ponowne użycie pary klucz/IV kompromituje cały strumień klucza (ISO/TS 32003:2023 §5.2 NOTE 2; NIST SP 800-38D §8.3).
- Pola kontekstu.
key_fingerprint_prefix(pierwsze 8 znaków szesnastkowych SHA-256(klucz)),iv_length(zawsze 12 dla ISO/TS 32003),reason(hashset-collisionlubcounter-rollover, odróżniający błąd refaktoryzacji unieważniający licznik od progu zadziałania licznika 2^63) oraziv_fixed_field_hex(pole stałe IV, obecne tylko gdy dostarczone, raportowane pod własnym kluczem i nigdy błędnie oznaczone jako odcisk palca klucza). - Naprawa. Natychmiast przerwij i wymień klucz. Zgłoś raport o usterce; oznacza to błąd w szyfratorze, a nie nieprawidłowe dane wejściowe wywołującego.
GcmInvocationLimitExceededException
Dział zatytułowany „GcmInvocationLimitExceededException”- Kiedy zgłaszany. Osiągnięto opcjonalną liczbę wywołań bezpieczeństwa użycia z NIST SP 800-38D §8.3
dla danego klucza AES-GCM. To hak telemetryczny obrony w głąb dla
wywołujących, którzy chcą egzekwować zalecaną przez specyfikację granicę (około 2^32
wywołań na klucz) wcześniej niż architektoniczne limity wewnątrz
szyfratora. Nie zadziała domyślnie; zgłasza to wyłącznie pomocnik
assertWithinSafetyBound(). - Pola kontekstu.
key_fingerprint_prefix,invocation_count(bieżąca liczbaencrypt(), na poziomie limitu lub powyżej),invocation_limit(opcjonalna granica). - Naprawa. Wymień klucz dokumentu (skonstruuj świeży szyfrator z nowym materiałem klucza), zanim łączne prawdopodobieństwo kolizji i sfałszowania przestanie być pomijalne, albo rozszerz politykę wywołującego, aby odmawiać dalszej obsługi.
IncompatiblePdfAModeException
Dział zatytułowany „IncompatiblePdfAModeException”- Kiedy zgłaszany. Podjęto próbę operacji szyfrowania na dokumencie
oznaczonym jako PDF/A. Rodzina PDF/A (PDF/A-2, PDF/A-3, PDF/A-4) jednolicie zabrania
szyfrowania: zgodnie z ISO 19005 §6.1.3 klucz
Encryptnie może być obecny w zwiastunie, a ISO 19005-4:2020 Aneksy A i B dziedziczą to bez modyfikacji. Nie istnieje dozwolona kombinacja PDF/A i szyfrowania. - Pola kontekstu.
pdfa_mode(na przykładpdfa4,pdfa3),encryption_operation(odrzucone wywołanie, na przykładuseAesGcm). - Naprawa. Aby utworzyć zaszyfrowany dokument, pomiń wywołanie
enablePdfA(); aby utworzyć dokument archiwalny, pomiń wywołanie szyfrowania. Zobacz Walidacja PDF/A i PDF/UA.
Egzekwowanie polityki kryptograficznej
Dział zatytułowany „Egzekwowanie polityki kryptograficznej”CryptoPolicyViolationException
Dział zatytułowany „CryptoPolicyViolationException”- Kiedy zgłaszany. Skonfigurowana polityka kryptograficzna odrzuca algorytm, siłę klucza
lub szyfr wybrany przez podstawową operację podpisywania, szyfrowania lub haszowania. To
granica fail-closed dla egzekwowania zgodności (na przykład FIPS 140-2/3,
eIDAS lub niestandardowa polityka korporacyjna), zgłaszana przez
CryptoPolicyEnforcerprzed wytworzeniem jakiegokolwiek podpisu lub szyfrogramu, więc operacja naruszająca politykę nigdy nie może wyemitować niezatwierdzonego artefaktu. Odrębna od wąskiej awarii operacji OpenSSL oraz od awarii prymitywu podpisującego: to odrzucenie przez politykę poza tym prawidłowego żądania. Zgodna z NIST SP 800-131A Rev. 2 oraz ISO/IEC 19790:2025 §7. - Pola kontekstu.
policy(nazwa polityki, na przykładFIPS 140-3 Strict),category(hash,signature,encryptionlubkey-strength),item(odrzucony element, na przykład identyfikator obiektu (OID), nazwa szyfru lubrsa/1024),reason. - Naprawa. Wybierz algorytm, długość klucza lub szyfr, który nazwana polityka zatwierdza, albo dostosuj politykę, jeśli jesteś jej właścicielem. Skieruj ustrukturyzowany kontekst do udokumentowanego podręcznika operacyjnego zgodności.
Zarządzanie kluczami
Dział zatytułowany „Zarządzanie kluczami”Istnieją dwie klasy o tej samej nazwie. Współdzielą korzeń SecurityException, więc jeden
blok catch (SecurityException $e) ujmuje obie, ale niosą odrębne ładunki.
Importuj według w pełni kwalifikowanej nazwy, gdy potrzebujesz konkretnego kształtu.
KeyManagementException (cykl życia: NextPDF\Security\Exception)
Dział zatytułowany „KeyManagementException (cykl życia: NextPDF\Security\Exception)”- Kiedy zgłaszany. Operacja zarządzania kluczami nie powiedzie się, zanim klucz zostanie spożytkowany przez prymityw podpisu lub szyfrowania: awarie parsowania klucza Privacy-Enhanced Mail (PEM), PKCS#12 lub PKCS#11; awarie wyprowadzania klucza (HKDF, PBKDF2, scrypt); odrzucenie AES Key Wrap (RFC 3394) na nieprawidłowym kluczu szyfrującym klucz; sprzętowy moduł bezpieczeństwa (HSM) zwracający źle sformowane Distinguished Encoding Rules (DER); albo niezgodność długości ziarna Ed25519.
- Pola kontekstu.
operation(na przykładload_pem,kek_derive,key_wrap),key_type(na przykładRSA,EC-P256,Ed25519,AES-256),reason. Surowy materiał klucza nigdy nie jest dołączany. - Naprawa. Sprawdź nazwaną operację oraz typ klucza, popraw źródłowy materiał klucza lub dane wejściowe wyprowadzania i ponów.
KeyManagementException (ścieżka podpisywania: NextPDF\Security\Signature\Exception)
Dział zatytułowany „KeyManagementException (ścieżka podpisywania: NextPDF\Security\Signature\Exception)”- Kiedy zgłaszany. Dostawca obiektu podpisującego napotyka błąd zarządzania kluczami: żądana
wersja klucza jest nieznana, wyłączona, zaplanowana do zniszczenia, nie ma uprawnienia
do podpisywania albo jest w inny sposób nieużywalna. To właśnie zgłaszają
RsaPssSigneriLocalKeySignerProviderprzy awariach klucza na żywo. Nazwane konstruktory:unknownKeyVersion()orazkeyVersionDisabled(). - Pola kontekstu.
providerId,keyVersion,reason. Akcesory:providerId(),keyVersion(),reason(). - Naprawa. Wymień klucz lub nadaj mu ponownie uprawnienia, albo wybierz używalną wersję klucza,
a następnie ponów. Odrębne od
SignatureFailedException, które sygnalizuje, że sam prymityw podpisujący zawiódł.
Podpisywanie
Dział zatytułowany „Podpisywanie”Aby uzyskać wskazówki zaczynające się od objawu dotyczące nieosiągalnych poziomów i brakujących możliwości, zobacz Błędy podpisu i znacznika czasu.
SignatureFailedException (R4-13: NextPDF\Security\Exception)
Dział zatytułowany „SignatureFailedException (R4-13: NextPDF\Security\Exception)”- Kiedy zgłaszany. Kryptograficzna operacja podpisywania nie powiedzie się: prymityw podpisujący RSA, ECDSA lub
Ed25519 zwraca
falsealbo wyjście o błędnej długości; token HSM lub PKCS#11 odpowiada statusem braku sukcesu; składanieSignedDataCryptographic Message Syntax (CMS) nie powiedzie się na źle sformowanym certyfikacie lub łańcuchu; albo samoweryfikacja Ed25519 w obie strony nie powiedzie się. Nowy kod powinien preferować ten podtyp R4-13 zamiast starego wyjątku podpisu powiązanego z PAdES. - Pola kontekstu.
operation(na przykładsign,verify,build_cms),algorithm(na przykładrsa-pkcs1v15-sha256,ed25519),reason. Akcesory:getOperation(),getAlgorithm(),getReason(). - Naprawa. Odczytaj operację i algorytm, popraw dane wejściowe (klucz, łańcuch certyfikatów lub dostępność backendu) i ponów. Zgodne z postawą fail-closed obsługi klucza z ETSI EN 319 142-1.
SignatureFailedException (SPI: NextPDF\Security\Signature\Exception)
Dział zatytułowany „SignatureFailedException (SPI: NextPDF\Security\Signature\Exception)”- Kiedy zgłaszany. Implementacja
SignerProviderInterfacenie może ukończyć operacji podpisywania z dowolnego powodu niesklasyfikowanego jako zarządzanie kluczami: błąd sterownika backendu, źle sformowany materiał klucza lub nieusuwalne wejście/wyjście HSM. To wariant przechwytujący wszystko dla kontraktu podpisywania fail-closed, w którym każdy prymityw zgłasza wyjątek przy awarii, zamiast zwracaćnull,falselub pusty ciąg. Nazwany konstruktor:forProvider(). - Pola kontekstu.
providerId,reason. Akcesory:providerId(),reason(). - Naprawa. Sprawdź identyfikator dostawcy oraz przyczynę, popraw backend dostawcy lub
materiał klucza i ponów. Rozgałęziaj logikę na
KeyManagementExceptionwzględem tego typu, aby oddzielić „klucz jest zły” od „prymityw zawiódł”.
SignatureLevelUnreachableException
Dział zatytułowany „SignatureLevelUnreachableException”- Kiedy zgłaszany. Żądanego poziomu zgodności PAdES nie można uhonorować w
bieżącej infrastrukturze środowiska wykonawczego (najczęściej brak urzędu znaczników czasu dla
B-T i wyższych), a wywołujący nie udzielił zgody na degradację. Domyślnie
działa w trybie fail-closed: silnik odmawia, zamiast po cichu wytworzyć niższy poziom,
reklamując jednocześnie wyższy, co byłoby regresją o randze eIDAS.
Zgodne z ETSI EN 319 142-1 §6. Zauważ, że ta klasa rozszerza
NextPdfExceptionbezpośrednio (a nieSecurityException). - Pola kontekstu.
requestedLevel,highestAchievableLevel,reason. Akcesory:requestedLevel(),highestAchievableLevel(),reason(). - Naprawa. Odczytaj
reason, aby zidentyfikować brakującą infrastrukturę, i dostarcz ją (na przykład skonfiguruj urząd znaczników czasu) albo przekażallowDegradation: truedoPadesOrchestrator, aby celowo zaakceptować najwyższy osiągalny poziom.
SignerProviderNotFoundException
Dział zatytułowany „SignerProviderNotFoundException”- Kiedy zgłaszany.
SignerProviderRegistry::get()zostaje poproszony o identyfikator dostawcy, który nie jest zarejestrowany. Implementuje PSR-11NotFoundExceptionInterface, więc rejestr jest zgodny z kontraktem kontenera PSR-11. Nazwany konstruktor:forId(). Ta klasa rozszerzaRuntimeExceptioni nie udostępniagetContext(). - Pola kontekstu. Brak. Niezarejestrowany identyfikator pojawia się w komunikacie.
- Naprawa. Zarejestruj dostawcę pod oczekiwanym identyfikatorem przed zażądaniem go albo popraw identyfikator przekazywany do rejestru.
Haszowanie (SHAKE256)
Dział zatytułowany „Haszowanie (SHAKE256)”Rozszerzają RuntimeException i nie udostępniają getContext(). SHAKE256 to
funkcja o rozszerzanej długości wyjścia SHA-3 wymagana przez niektóre ścieżki ISO/TS 32001.
Shake256NotAvailableException
Dział zatytułowany „Shake256NotAvailableException”- Kiedy zgłaszany. W czasie obliczania skrótu, gdy wybrany dostawca nie może spełnić
żądania. Nazwane konstruktory:
noBackend()(brak działającego backendu SHAKE256 na tym hoście, we wszystkich próbowanych poziomach) orazffiCallFailed()(wywołanie OpenSSL EVP powiązane przez FFI zwróciło status braku sukcesu, na przykład z okrojonej kompilacji libcrypto). - Pola kontekstu. Brak. Komunikat podaje próbowane poziomy lub nieudany symbol.
- Naprawa. Zainstaluj
ext-ffiz obecnym OpenSSL 3.x albo zaktualizuj do kompilacji PHP, która udostępniashake256whash_algos(). Wariant zapasowy Keccak w przestrzeni użytkownika celowo nie jest dostarczany.
Shake256ProviderNotAvailableException
Dział zatytułowany „Shake256ProviderNotAvailableException”- Kiedy zgłaszany. Z konstruktora dostawcy SHAKE256, gdy sonda możliwości
zawiedzie, więc dostawcy nie można zinstancjonować. To sygnał sterowania przepływem:
rejestr dostawców go przechwytuje, zapisuje etykietę poziomu i próbuje następnego poziomu.
Nigdy nie powinien wydostać się do kodu aplikacji. Nazwany konstruktor:
forTier(). - Pola kontekstu. Brak. Komunikat podaje poziom oraz przyczynę.
- Naprawa. Nie jest bezpośrednio możliwy do obsłużenia przez wywołującego; jeśli cały łańcuch poziomów zostanie
wyczerpany, rejestr ujawnia zamiast tego
Shake256NotAvailableException::noBackend(), które niesie naprawę zorientowaną na operatora.
Integralność MAC dokumentu (ISO/TS 32004)
Dział zatytułowany „Integralność MAC dokumentu (ISO/TS 32004)”Obejmują kod uwierzytelniania wiadomości (MAC) na poziomie dokumentu z ISO/TS 32004,
przechowywany pod /AuthCode. Obie rozszerzają NextPdfException i nadpisują
getContext().
DocumentMacTokenException
Dział zatytułowany „DocumentMacTokenException”- Kiedy zgłaszany. W trybie fail-closed, przez czytnik tokenu MAC, gdy token MAC CMS
AuthenticatedDatajest strukturalnie źle sformowany lub deklaruje algorytm spoza uzgodnionego zestawu ISO/TS 32004. Nazwane konstruktory:malformed()orazalgorithmMismatch(). Oznaczony jako@internal. - Pola kontekstu.
status(wartośćDocumentMacVerificationStatus, czyliMalformedTokenlubAlgorithmMismatch). Publiczna właściwość readonly:$status. - Naprawa. Potraktuj dokument jako niezweryfikowany. Źle sformowany token lub algorytm spoza uzgodnionego zestawu oznacza, że MAC nie może ustanowić zaufania; nie postępuj tak, jakby treść była chroniona.
DocumentMacVerificationException
Dział zatytułowany „DocumentMacVerificationException”- Kiedy zgłaszany. W trybie fail-closed, gdy weryfikacja MAC na poziomie dokumentu nie może osiągnąć
zaufanego stanu: brakujący lub źle sformowany
/AuthCode, algorytm spoza uzgodnionego zestawu, awaria rozpakowania albo niezgodność MAC (manipulacja). Metodaverify()weryfikatora zwraca jawny wynik do rozgałęziania; to jest odpowiednik w przepływie wyjątków zgłaszany przezassertVerified(), aby kod „zaufaj treści” nigdy nie mógł przejść poza niezweryfikowany dokument. Nazwany konstruktor:fromResult(). - Pola kontekstu.
status(wartośćDocumentMacVerificationStatus). Publiczna właściwość readonly:$status. - Naprawa. Nie ufaj treści dokumentu. Sprawdź
status, aby odróżnić manipulację (niezgodność MAC) od problemu konfiguracji (brakujący lub źle sformowany/AuthCode, niezgodność algorytmu).
Walidacja ścieżki PKI (RFC 5280)
Dział zatytułowany „Walidacja ścieżki PKI (RFC 5280)”Obejmują walidację ścieżki certyfikacji z RFC 5280. Typ bazowy oraz jego podklasy działają w trybie fail-closed.
PkiPathValidationException
Dział zatytułowany „PkiPathValidationException”- Kiedy zgłaszany. Awaria trybu ścisłego z walidatora ścieżki RFC 5280. To
niefinalna baza dla węższych podklas (
ChainLengthExceededException,UnsupportedExtensionException), więc programy obsługi przechwytujące ten typ przechwytują również tamte przez podstawialność Liskov. RozszerzaSecurityException. - Pola kontekstu. Nie nadpisuje
getContext()(dziedziczy pustą wartość domyślną). Niesie ustrukturyzowane przyczyny w zamrożonej publicznej właściwości readonly$reasons(niepustej liście napisów nazwa-reguły plus opis). - Naprawa. Odczytaj
$reasons, aby zidentyfikować zawodzącą regułę, popraw łańcuch certyfikatów i zwaliduj ponownie. Przechwyć ten typ, aby jednolicie obsłużyć każdą awarię walidacji ścieżki.
ChainLengthExceededException
Dział zatytułowany „ChainLengthExceededException”- Kiedy zgłaszany. Walidator ścieżki zostaje poproszony o przejście łańcucha, którego długość
przekracza skonfigurowany pułap. Górna granica jest egzekwowana przed rozpoczęciem jakiegokolwiek parsowania,
więc złośliwy dostawca nie może wpędzić walidatora w kwadratową pracę ani
wyczerpać zasobów dowolnie głębokim łańcuchem. Domyślny pułap 10
jest zgodny z profilem PKIX-CMP (RFC 4210 §5.3.18); łańcuchy z realnego świata mieszczą się w 5 do 6
wpisach. Podklasa
PkiPathValidationException. - Pola kontekstu. Dziedziczy puste
getContext(); napis przyczynychain_length_exceeded: supplied=<n> cap=<n>jest przekazywany do$reasonsrodzica. Publiczne właściwości readonly:$supplied,$cap. - Naprawa. Dostarcz łańcuch mieszczący się w pułapie albo podnieś skonfigurowaną górną granicę, jeśli spodziewany jest zasadnie dłuższy łańcuch.
UnsupportedExtensionException
Dział zatytułowany „UnsupportedExtensionException”- Kiedy zgłaszany. Walidator ścieżki napotyka krytyczne rozszerzenie X.509, którego
egzekwowanie nie jest jeszcze zaimplementowane. Zgodnie z RFC 5280 §4.2 nierozpoznane krytyczne
rozszerzenie musi zadziałać w trybie fail-closed; zarówno tryb ścisły, jak i łagodny działają tu w trybie fail-closed, ponieważ
ciche pominięcie krytycznego rozszerzenia byłoby regresją bezpieczeństwa. Walidator
obejmuje budowanie łańcucha, dopasowanie AKI/SKI, użycie klucza, rozszerzone użycie klucza,
ograniczenia podstawowe, wygaśnięcie oraz weryfikację podpisu; wszystko inne krytyczne
ujawnia się tutaj. Podklasa
PkiPathValidationException. - Pola kontekstu. Dziedziczy puste
getContext(); ustrukturyzowane przyczyny są przekazywane do$reasonsrodzica. Publiczne właściwości readonly:$extensionOid(kropkowany OID, na przykład2.5.29.30dla ograniczeń nazw),$extensionName,$clauseRef(wskaźnik na klauzulę RFC 5280 oraz wpis dziennika elementów odroczonych). - Naprawa. W trybie łagodnym przechwyć tę konkretną podklasę, aby cofnąć się do
zgrubniejszej polityki bez połykania prawdziwych awarii walidacji ścieżki. Skontroluj
$extensionOidi$clauseRefwzględem swoich fikstur PKI, aby zobaczyć, które rozszerzenie blokuje walidację.
RevocationCheckFailedException
Dział zatytułowany „RevocationCheckFailedException”- Kiedy zgłaszany. Zarówno punkty końcowe OCSP, jak i listy unieważnionych certyfikatów (CRL) zostają
wyczerpane bez ostatecznego werdyktu: awaria transportu OCSP lub źle sformowana
odpowiedź oraz awaria transportu CRL lub źle sformowana CRL, przy obu otwartych wyłącznikach obwodu
lub obu brakujących pamięciach podręcznych. Tryb ścisły traktuje to jako fail-closed; tryb łagodny
to przechwytuje i emituje ostrzeżenie PSR-3 z
revocation = null. RozszerzaSecurityException. - Pola kontekstu. Nie nadpisuje
getContext()(dziedziczy pustą wartość domyślną). Niesie stan w publicznych właściwościach readonly$ocspStatei$crlState(każda domyślnieunknown). - Naprawa. Przywróć osiągalność źródła unieważnień, poczekaj na zamknięcie wyłączników obwodu albo rozgrzej pamięć podręczną, a następnie ponów. Nie tłum tego, aby uzyskać artefakt walidacji długoterminowej; potwierdzenie unieważnienia jest częścią tego poziomu.
Weryfikacja podpisu OCSP (RFC 6960)
Dział zatytułowany „Weryfikacja podpisu OCSP (RFC 6960)”OcspSignatureInvalidException
Dział zatytułowany „OcspSignatureInvalidException”- Kiedy zgłaszany. Podpis
BasicOCSPResponsez RFC 6960 §4.2.2.2 nie przechodzi weryfikacji kryptograficznej względem certyfikatu respondera. Parser dekodujesignatureAlgorithm(RSA-PSS, ECDSA lub RSA-PKCS1v15) i weryfikujesignaturenadtbsResponseData; każda awaria zgłasza ten typowany wyjątek, aby wywołujący mogli odróżnić strukturalnie prawidłową, ale kryptograficznie zmanipulowaną odpowiedź od odpowiedzi ze źle sformowanym DER. Niefinalna, więc pakiety downstream mogą publikować bardziej szczegółowe podklasy. RozszerzaSecurityException. - Pola kontekstu. Nie nadpisuje
getContext()(dziedziczy pustą wartość domyślną). Niesie znacznik awarii w publicznej właściwości readonly$reason(na przykładsignature_mismatch,responder_cert_not_in_bundle,unsupported_signature_algorithm); wolnotekstowydetailjest złożony w komunikacie. - Naprawa. Sprawdź
$reason. Dlaresponder_cert_not_in_bundledostarcz poprawny pakiet kotwic zaufania oraz certyfikat respondera. Dlasignature_mismatchpotraktuj odpowiedź jako niegodną zaufania. Zobacz Błędy podpisu i znacznika czasu.
Znakowanie czasem (RFC 3161)
Dział zatytułowany „Znakowanie czasem (RFC 3161)”TsaException
Dział zatytułowany „TsaException”- Kiedy zgłaszany. Awaria w komunikacji z urzędem znaczników czasu (TSA) z RFC 3161
lub w parsowaniu odpowiedzi: TSA zwraca status błędu, żądanie HTTP się nie powiedzie albo
odpowiedzi ASN.1 nie można sparsować. To baza hierarchii błędów TSA
i jest niefinalna, aby awarie weryfikacji mogły ją rozszerzać. Rozszerza
NextPdfException. - Pola kontekstu. Nie nadpisuje
getContext()(dziedziczy pustą wartość domyślną). - Naprawa. Przechwyć
TsaExceptiondla każdej ścieżki błędu TSA. Zweryfikuj osiągalność TSA oraz to, że punkt końcowy zwraca poprawnie sformowaną odpowiedź RFC 3161.
TsaTokenVerificationException
Dział zatytułowany „TsaTokenVerificationException”- Kiedy zgłaszany. Weryfikacja CMS
TimeStampTokenz RFC 3161 nie powiedzie się na którymkolwiek z nakazanych kroków weryfikacji: powiązanie ESSCertIDv2 z RFC 5816 §3, integralność podpisanych atrybutów z RFC 5652 §11, świeżośćproducedAtz RFC 3161 §2.4.2 albo podpisSignerInfoz RFC 5652 §5.4. W trybie fail-closed, z typowanym dyskryminatorem kroku, aby potoki audytowe odróżniały ponowne odtworzenie (replay) od dryfu zegara od niezgodności certyfikatu bez przeszukiwania komunikatów. PodklasaTsaException, więc stare programy obsługicatch (TsaException)nadal się uruchamiają. - Pola kontekstu.
step(zawodząca wartośćSteppotoku) orazmessage. Akcesor:getStep(). - Naprawa. Możliwe do obsłużenia przez programistę (błędnie skonfigurowany certyfikat TSA lub tolerancja
dryfu) albo bezpieczeństwo (podejrzewany MITM lub replay). Odczytaj
step, aby zlokalizować zawodzący etap i popraw odpowiednie dane wejściowe lub konfigurację zaufania.
MalformedDerException
Dział zatytułowany „MalformedDerException”- Kiedy zgłaszany. Wewnętrzny sygnał, że przejście DER trafiło na źle sformowaną lub obciętą
granicę, zgłaszany przez niskopoziomowe walkery wewnątrz weryfikatora tokenu TSA. Jest
zawsze przechwytywany na publicznej granicy weryfikacji i ponownie opakowywany w
TsaTokenVerificationExceptionniosący właściwy dyskryminator kroku; nigdy nie wycieka do kodu wywołującego. RozszerzaRuntimeException; oznaczony jako@internal. - Pola kontekstu. Brak.
- Naprawa. Nie skierowany do wywołującego. Obsłuż zamiast tego opakowany
TsaTokenVerificationException.
Dekodowanie rozszerzeń certyfikatu
Dział zatytułowany „Dekodowanie rozszerzeń certyfikatu”Rozszerzają RuntimeException i nie udostępniają getContext(). Oba to
dekodery działające w trybie fail-closed.
NameConstraintsDecodeException
Dział zatytułowany „NameConstraintsDecodeException”- Kiedy zgłaszany. Dekoder ograniczeń nazw napotyka egzekwowalny element
GeneralSubtree, którego nie potrafi wiernie zdekodować. RFC 5280 §4.2.1.10 wymaga, aby strona ufająca przetworzyła egzekwowalne ograniczenie nazwy lub odrzuciła certyfikat; przekształcenie wcześniejszego cichego pominięcia w tę typowaną awarię zapobiega fail-open, który po cichu poszerzyłby akceptowany zbiór nazw. Zakres jest ograniczony do egzekwowalnych form nazw (directoryName, dNSName, iPAddress, rfc822Name, uniformResourceIdentifier); formy nieegzekwowalne pozostają ignorowalne i nigdy go nie zgłaszają. Nazwany konstruktor:undecodableEnforceableBase(). Oznaczony jako@internal. - Pola kontekstu. Brak. Bezpieczny dla logu napis ze szczegółami jest niesiony w komunikacie.
- Naprawa. Egzekutor ujawnia przyczynę
name_constraints:w trybie fail-closed, a łańcuch zostaje odrzucony. Zbadaj kodowanie ograniczeń nazw certyfikatu; nie łagodź egzekwowania.
QcStatementsDecodeException
Dział zatytułowany „QcStatementsDecodeException”- Kiedy zgłaszany. Rozszerzenie
qcStatementsjest strukturalnie źle sformowane: obcięty DER, błędny znacznik lub przepełnienie długości. Dekoder działa w trybie fail-closed i zgłasza wyjątek, zamiast zwracać częściowy lub heurystyczny wynik, gdy nie może z pewnością ustalić, co mówi rozszerzenie. Oznaczony jako@api. - Pola kontekstu. Brak.
- Naprawa. Przechwyć go jawnie tylko wtedy, gdy zamierzasz tolerować źle sformowane kodowanie; w przeciwnym razie potraktuj oświadczenia certyfikatu kwalifikowanego jako nieustalalne i odrzuć lub ponownie wystaw certyfikat.
Sesje PKCS#11
Dział zatytułowany „Sesje PKCS#11”Pkcs11SessionException
Dział zatytułowany „Pkcs11SessionException”- Kiedy zgłaszany. Defekt zarządzania sesją PKCS#11 v3.1. Każdy nazwany
konstruktor odwzorowuje się na konkretną klasę defektu oraz na wartość zwracaną
CKR_*PKCS#11, ujawnianą przez typowany dyskryminator$kind, aby wywołujący rozgałęziali logikę na stabilnym napisie wyliczeniowym zamiast na kruchym dopasowywaniu komunikatów. Konstruktory obejmują:cryptokiNotInitialized(),userNotLoggedIn(),userAlreadyLoggedIn(),operationNotInitialized(),operationActive(),mechanismNotAllowed(),tokenDisconnected(),concurrentSessionLimitExceeded(),sessionAlreadyClosed(),stateTransitionInvalid(),osLockingRequired(),loginTtlExpired()orazsignOperationTtlExpired(). RozszerzaSecurityException. - Pola kontekstu. Nie nadpisuje
getContext()(dziedziczy pustą wartość domyślną). Niesie typowany rodzaj w publicznej właściwości readonly$kind, jednej z stałychKIND_*(na przykładKIND_USER_NOT_LOGGED_IN,KIND_TOKEN_DISCONNECTED,KIND_LOGIN_TTL_EXPIRED). Identyfikatory slotu i sesji, mechanizm oraz wartości TTL pojawiają się w komunikacie. Kody PIN i bajty certyfikatu nigdy nie są dołączane. - Naprawa. Przełączaj według
$kind. Dlauser_not_logged_inzaloguj się kodem PIN użytkownika przed zainicjowaniem operacji podpisu. Dlatoken_disconnectedpotraktuj wszystkie sesje na slocie jako osierocone. Dla rodzajów TTL uwierzytelnij się ponownie lub ponownie zainicjuj operację. Dlamechanism_not_allowedrozszerz skonfigurowaną listę dozwolonych mechanizmów albo wybierz dozwolony mechanizm.