Rozwiązywanie problemów: błędy podpisu i znacznika czasu
Te wpisy obejmują błędy podpisu zgłaszane przez NextPDF\Exception\SignatureException oraz NextPDF\Security\Signature\Exception\SignatureLevelUnreachableException. Każdy wpis wskazuje konkretną metodę fabryczną lub klasę, dzięki czemu przyczynę można potwierdzić na podstawie komunikatu i getContext(), zamiast ją zakładać.
Uwaga terminologiczna: silnik nie poświadcza, że podpis jest prawidłowy ani że dokument jest chroniony. Zgłasza błąd, który wykrył. Każde rozwiązanie traktuj jako krok prowadzący do usunięcia zgłoszonej przyczyny.
Wpis: nie można wygenerować poziomu PAdES „B-LT” ani „B-LTA”
Dział zatytułowany „Wpis: nie można wygenerować poziomu PAdES „B-LT” ani „B-LTA””- Objaw.
SignatureExceptionz końcówką komunikatunextpdf/enterprise package is required for B-LT/B-LTA signatures. - Prawdopodobna przyczyna. Brakuje dostawcy funkcji walidacji długoterminowej. B-LT i B-LTA osadzają materiał unieważnień oraz archiwalny znacznik czasu, a taki dostawca jest dostępny w
nextpdf/enterprise. - Dowody / diagnoza. Metoda fabryczna
SignatureException::ltvCapabilityMissing()generuje dokładnie ten komunikat.getContext()zwracasignature_levelustawione na poziom, dla którego podjęto próbę. - Rozwiązanie.
- Zainstaluj dostawcę, uruchamiając
composer require nextpdf/enterprise. - Ponownie wywołaj operację podpisywania.
- Jeśli nie możesz zainstalować dostawcy, zażądaj zamiast tego poziomu
B-BlubB-T, który może wygenerować pakiet core.
- Zainstaluj dostawcę, uruchamiając
- Powiązane. Dokumentacja wyjątków.
Wpis: poziom podpisu jest nieosiągalny i wywołanie zostaje odrzucone
Dział zatytułowany „Wpis: poziom podpisu jest nieosiągalny i wywołanie zostaje odrzucone”- Objaw.
SignatureLevelUnreachableExceptionz komunikatem w postaciPAdES level "<x>" is unreachable (highest achievable: "<y>"). - Prawdopodobna przyczyna. Żądany poziom zgodności wymaga infrastruktury, która nie jest dostępna w momencie podpisywania, najczęściej urzędu znaczników czasu dla poziomu B-T i wyższych. Silnik działa w trybie fail-closed: nie obniża po cichu poziomu, aby potem deklarować wyższy.
- Dowody / diagnoza.
getContext()zwracarequestedLevel,highestAchievableLevelorazreason. Polereasonwskazuje brak w infrastrukturze. Jest to domyślne zachowanie fail-closed, wprowadzone po to, aby zapobiec powstaniu dokumentu deklarującego poziom, którego nie spełnia. - Rozwiązanie.
- Odczytaj pole
reason, aby zidentyfikować brakującą infrastrukturę. - Dostarcz brakujący komponent. Na przykład skonfiguruj urząd znaczników czasu i ponownie wywołaj operację.
- Aby celowo zaakceptować niższy poziom, przekaż
allowDegradation: truedoPadesOrchestrator. Wywołanie generuje wówczashighestAchievableLeveli zgłasza poziom, który wygenerowało.
- Odczytaj pole
- Powiązane. Szyfrowanie i uprawnienia.
Wpis: klient urzędu znaczników czasu jest wymagany, ale go brakuje
Dział zatytułowany „Wpis: klient urzędu znaczników czasu jest wymagany, ale go brakuje”- Objaw.
SignatureExceptionz końcówkąTSA client is required for level <x> but none was provided. - Prawdopodobna przyczyna. Żądanie poziomu B-T, B-LT lub B-LTA wymaga klienta urzędu znaczników czasu, a orkiestrator go nie otrzymał.
- Dowody / diagnoza. Metoda fabryczna
SignatureException::tsaRequired()generuje ten komunikat;getContext()zawierasignature_level, którego dotyczyła próba. - Rozwiązanie.
- Skonfiguruj klienta urzędu znaczników czasu i przekaż go do orkiestratora.
- Ponownie wywołaj operację.
- Aby wygenerować poziom, który nie wymaga znacznika czasu, zażądaj
B-B.
- Powiązane. Dokumentacja wyjątków.
Wpis: adres URL punktu końcowego urzędu znaczników czasu jest pusty
Dział zatytułowany „Wpis: adres URL punktu końcowego urzędu znaczników czasu jest pusty”- Objaw.
SignatureExceptionz końcówkąTSA endpoint URL is empty. - Prawdopodobna przyczyna. Klient urzędu znaczników czasu został utworzony z pustym adresem URL punktu końcowego.
- Dowody / diagnoza. Metoda fabryczna
SignatureException::tsaUrlEmpty()generuje ten komunikat. Jest to wada konfiguracji, a nie awaria sieci. - Rozwiązanie.
- Ustaw niepusty adres URL punktu końcowego w kliencie urzędu znaczników czasu, na przykład
https://timestamp.example.com/tsa. - Jeśli żądany poziom nie wymaga znacznika czasu, usuń zamiast tego podłączenie klienta urzędu znaczników czasu.
- Ponownie wywołaj operację.
- Ustaw niepusty adres URL punktu końcowego w kliencie urzędu znaczników czasu, na przykład
- Powiązane. Dokumentacja wyjątków.
Wpis: w buforze brakuje symbolu zastępczego podpisu
Dział zatytułowany „Wpis: w buforze brakuje symbolu zastępczego podpisu”- Objaw.
SignatureExceptionz końcówkąno /Contents <…> field found in PDF buffer (signature placeholder missing). - Prawdopodobna przyczyna. Etap podpisywania otrzymał bufor bez zarezerwowanego kontenera podpisu, więc nie ma miejsca, w którym można zapisać podpis.
- Dowody / diagnoza. Metoda fabryczna
SignatureException::signatureContentsNotFound()generuje ten komunikat. - Rozwiązanie.
- Upewnij się, że pole podpisu i jego symbol zastępczy są zapisane przed uruchomieniem etapu podpisywania.
- Ponownie uruchom potok, aby symbol zastępczy istniał w momencie rozpoczęcia podpisywania.
- Powiązane. Dokumentacja wyjątków.
Wpis: status unieważnienia jest nieznany (responder OCSP odmówił)
Dział zatytułowany „Wpis: status unieważnienia jest nieznany (responder OCSP odmówił)”- Objaw.
SignatureExceptionz końcówkąOCSP responder returned non-successful OCSPResponseStatus "<status>". - Prawdopodobna przyczyna. Responder Online Certificate Status Protocol (OCSP) nie zwrócił statusu
successful, więc nie wygenerował żadnego potwierdzenia unieważnienia. Silnik stosuje się do RFC 6960 §4.2.1, które cytuje w kodzie źródłowym: wypełniona treść odpowiedzi jest dozwolona wyłącznie dla statususuccessful (0). Silnik odmawia traktowania odrzuconej odpowiedzi jako wyniku potwierdzającego zaufanie. - Dowody / diagnoza. Metoda fabryczna
SignatureException::nonSuccessfulOcspResponseStatus()generuje ten komunikat i podaje zgłoszony status, na przykładtryLaterlubinternalError. Zarezerwowany albo nieznany bajt statusu generuje natomiastSignatureException::reservedOcspResponseStatus(). - Rozwiązanie.
- Zidentyfikuj status w komunikacie. W przypadku statusu przejściowego, takiego jak
tryLater, ponów pobranie unieważnienia później. - W przypadku
unauthorizedlubmalformedRequestzweryfikuj adres URL żądania OCSP oraz certyfikat, którego oczekuje responder. - Nie wyciszaj błędu, aby uzyskać artefakt B-LT lub B-LTA; potwierdzenie unieważnienia jest częścią tego poziomu.
- Zidentyfikuj status w komunikacie. W przypadku statusu przejściowego, takiego jak
- Powiązane. Dokumentacja wyjątków.
Wpis: nie udaje się zdekodować wpisu łańcucha certyfikatów
Dział zatytułowany „Wpis: nie udaje się zdekodować wpisu łańcucha certyfikatów”- Objaw.
SignatureExceptionz końcówkąfailed to base64-decode PEM body — input is not valid PEM. - Prawdopodobna przyczyna. Wpis łańcucha certyfikatów nie ma prawidłowego formatu Privacy-Enhanced Mail (PEM), zwykle z powodu obcięcia, błędnego znaku lub binarnego bloku Distinguished Encoding Rules (DER) dostarczonego tam, gdzie oczekiwano PEM.
- Dowody / diagnoza. Metoda fabryczna
SignatureException::pemDecodingFailed()generuje ten komunikat podczas budowania łańcucha. - Rozwiązanie.
- Sprawdź każdy certyfikat w łańcuchu pod kątem błędnych znaków lub obcięcia.
- Ponownie wyeksportuj w formacie PEM certyfikat, którego dotyczy problem.
- Ponownie wywołaj operację podpisywania.
- Powiązane. Szyfrowanie i uprawnienia.
Wpis: typ klucza prywatnego nie pasuje do algorytmu
Dział zatytułowany „Wpis: typ klucza prywatnego nie pasuje do algorytmu”- Objaw.
SignatureExceptionz końcówkąexpected private key of type "<x>" for the configured algorithm but got "<y>". - Prawdopodobna przyczyna. Wczytany klucz prywatny nie pasuje do skonfigurowanego algorytmu podpisu, na przykład klucz Rivest-Shamir-Adleman (RSA) przy wybranym Elliptic Curve Digital Signature Algorithm (ECDSA).
- Dowody / diagnoza. Metoda fabryczna
SignatureException::unexpectedKeyType()generuje ten komunikat i podaje zarówno oczekiwaną, jak i rzeczywistą klasę klucza. - Rozwiązanie.
- Sprawdź, czy certyfikat i para kluczy pasują do wybranego algorytmu.
- Zmień algorytm tak, aby pasował do klucza, albo wczytaj klucz, który pasuje do algorytmu.
- Ponownie wywołaj operację podpisywania.
- Powiązane. Dokumentacja wyjątków.
Wpis: klucz lub materiał podpisu Ed25519 jest zniekształcony
Dział zatytułowany „Wpis: klucz lub materiał podpisu Ed25519 jest zniekształcony”- Objaw.
SignatureExceptionz końcówką wskazującą niezgodność długości Ed25519 — na przykładEd25519 signature length <n> ≠ expected 64 byteslubEd25519 round-trip self-verify failed. - Prawdopodobna przyczyna. Kompilacja biblioteki kryptograficznej w środowisku zwróciła klucz lub materiał podpisu o nieprawidłowej długości albo świeżo wygenerowany podpis nie przeszedł weryfikacji przy użyciu własnego klucza publicznego. Silnik cytuje w kodzie źródłowym RFC 8032 §3.4, które ustala długość odłączonego podpisu Ed25519 na 64 bajty. Silnik przerywa działanie zamiast zwracać materiał, którego nie może samodzielnie zweryfikować.
- Dowody / diagnoza. Odpowiednie metody fabryczne to
SignatureException::ed25519SignatureMalformed(),::ed25519RoundTripVerifyFailed(),::ed25519KeyParseFailed(),::ed25519SeedInvalid(),::ed25519SecretKeyMalformed()oraz::ed25519PublicKeyInvalid(). Każda z nich podaje zaobserwowaną długość. - Rozwiązanie.
- Zainstaluj ponownie rozszerzenie PHP libsodium; okrojona lub uszkodzona kompilacja jest udokumentowaną przyczyną materiału o nieprawidłowej długości.
- Potwierdź, że klucz jest kluczem Ed25519, a OpenSSL ma wersję 1.1.1 lub nowszą.
- Ponownie wywołaj operację podpisywania.
- Powiązane. Dokumentacja wyjątków.
Wpis: słownik archiwalnego znacznika czasu nie został wyemitowany
Dział zatytułowany „Wpis: słownik archiwalnego znacznika czasu nie został wyemitowany”- Objaw.
SignatureExceptionz końcówkąno /Type /DocTimeStamp dictionary was emitted into the PDF buffer. - Prawdopodobna przyczyna. Pętla archiwizacji B-LTA wykonała się, ale słownik znacznika czasu dokumentu nigdy nie trafił do bufora. Artefakt byłby niedokończonym B-LTA, więc silnik odmawia jego zwrócenia.
- Dowody / diagnoza. Metoda fabryczna
SignatureException::documentTimestampNotEmitted()generuje ten komunikat. Ten błąd warunku końcowego jest zgłaszany na etapie finalizacji. - Rozwiązanie.
- Potraktuj wynik jako odrzucony; nie wysyłaj częściowego artefaktu.
- Ponownie uruchom potok B-LTA z osiągalnym urzędem znaczników czasu.
- Jeśli błąd się powtarza, dołącz
getContext()oraz powiązany poprzedni wyjątek do zgłoszenia usterki.
- Powiązane. Dokumentacja wyjątków.
Przypadki brzegowe i pułapki
Dział zatytułowany „Przypadki brzegowe i pułapki”- Te metody fabryczne ustawiają
cert_infona podmiot lub odcisk palca tylko wtedy, gdy taka informacja jest dostępna; pustecert_infojest oczekiwane w przypadku błędów funkcji i konfiguracji. - Żądanie poziomu B-LT lub B-LTA bez skonfigurowanego klienta Hypertext Transfer Protocol (HTTP) zgłasza
SignatureException::httpClientMissing(); pobranie unieważnienia wymaga przekazania orkiestratorowi klienta PHP Standards Recommendation (PSR)-18. - Certyfikat oparty na sprzętowym module bezpieczeństwa (HSM) bez zaimplementowanego obiektu podpisującego zgłasza
SignatureException::hsmSignerMissing(); podłącz obiekt podpisujący do certyfikatu przed podpisaniem.
Zobacz też
Dział zatytułowany „Zobacz też”Słownik: poziom PAdES · potwierdzenie unieważnienia