TPDFlibSignatureVerifier

Безпека та підписи

Опис

Перелічує поля PDF-підписів і підписувачів CMS, перевіряє обраний підпис, не завантажуючи весь PDF у пам’ять, і окремо від поточного файлу повідомляє власну інкрементну ревізію обраного підписа Перевіряльник приймає файл, потік, що належить викликачу, або байтовий рядок ANSI через

OpenPDF, OpenPDFStream чи OpenPDFString

Вибір

Count := Verifier.GetSignatureCount;
Verifier.GetSignatureFieldName(0, FieldName);
SignerCount := Verifier.GetSignerCount(0);
Result := Verifier.VerifySignatureByName(FieldName, 0, Report);

VerifySignatureByIndex обирає поле PDF за індексом із нульовим відліком, тоді як VerifySignatureByName використовує повне кваліфіковане ім’я поля AcroForm; обидва методи приймають індекс підписувача CMS із нульовим відліком

Звіт про перевірку підпису

IntegrityResultКриптографічний результат перевірки цілісності CMS або застарілого PKCS#7 для обраного підписувача
CoverageStatusscInvalid, scSignedRevision чи scWholeDocument
ByteRangeValidІстинне лише тоді, коли всі діапазони обмежені, а підписана ревізія завершується власним %%EOF
ContentsGapValidІстинне лише тоді, коли пропущені байти є точно обраним шістнадцятковим токеном /Contents
HasLaterRevisionsІстинне, коли обраний підпис засвідчує попередню інкрементну ревізію і наявні пізніші байти
SignedRevisionLengthДовжина ревізії, яку засвідчує обраний підпис, у байтах
PermissionReportРозібрані обмеження DocMDP і FieldMDP для обраного підписа

Сертифікація та права полів

GetSignaturePermissionInfo і GetSignaturePermissionInfoByName повертають TPDFlibSignaturePermissionReport Звіт розрізняє чинне перетворення DocMDP і відповідне посилання

/Perms /DocMDP у каталозі, а також перевіряє, чи словник /Lock поля відповідає своєму перетворенню FieldMDP, дії та списку імен полів

Ланцюжок сертифікатів і відкликання

VerifySignerCertificateChainByIndex і VerifySignerCertificateChainByName виконують типову перевірку ланцюжка для явно обраного підписа та підписувача

VerifySignerCertificateChainEx і VerifySignerCertificateChainExByName додають перевірені сертифікати X.509 до набору коренів довіри в пам’яті, вільного від дублікатів Коли набір непорожній, кожен ланцюжок підписувача та мітки часу будується виключним рушієм довіри, який використовує цей набір для коренів CA і явних закріплених сертифікатів, не звертаючись до сховищ Windows srmNone чи srmCacheOnly Виключний рушій і розібране кореневе сховище кешуються перевіряльником і повторно використовуються, доки набір коренів не зміниться Така ізоляція дозволяє застосунку застосовувати приватну бізнес-політику довіри, не встановлюючи сертифікатів і не успадковуючи сторонньої машинної довіри Належність до коренів довіри не обходить перевірки чинності сертифіката, використання ключа, підписа чи запитаного відкликання srmOnline вивільняє набір і відновлює типовий системний рушій довіри Windows для подальших перевірок

TPDFlibSignatureChainReportTrustStatus

Вбудовані сертифікати та матеріал валідації можуть завершити ланцюг, але не перетворюють ненадійний корінь на надійний

Свідчення OCSP з DSS чи VRI приймається, лише коли його підпис відповідача, використання видавця чи делегованого відповідача, CertID, стан і свіжість збігаються з вибраним сертифікатом

Зовнішні джерела довіри

Verifier.AddTrustAnchorDER(RootCertificateDER);
Verifier.AddTrustAnchorFromFile('BusinessRoot.cer');
AnchorCount := Verifier.GetTrustAnchorCount;
Verifier.ClearTrustAnchors;

AddTrustAnchorDER приєднує AddTrustAnchorFromFile, що не перебуває у володінні та може постачати корені для конкретного часу й оцінювати успішно побудований ланцюжок сертифікатів Корені з джерела поєднуються з ручними користувацькими коренями в тому самому виключному рушії ланцюжків, який кешується за ревізією джерела та часом перевірки Призначення джерела вимикає резервне звернення до системних коренів Windows, коли джерело чи ручний корінь недоступні Успішна оцінка джерелом заповнює

Root, не послаблюючи перевірок ланцюжка сертифікатів, використання, чинності, підписа чи відкликання TrustedPeople реалізує цей контракт для підписаних документів EU LOTL і національних TSL

Ексклюзивний движок і розібране сховище коренів кешуються верифікатором і використовуються повторно, доки набір якорів не зміниться

Ця ізоляція дозволяє застосунку застосувати приватну бізнес-політику довіри без встановлення сертифікатів чи успадкування неспорідненої машинної довіри

Членство в якорі довіри не обходить перевірку чинності сертифіката, використання ключа, підпису чи запитаних перевірок відкликання

ClearTrustAnchors

Мітки часу RFC 3161

Verifier.SetTrustSource(TrustSource);
Source := Verifier.GetTrustSource;

SetTrustSource (індекс підписа) і TPDFlibSignatureTrustSource (ім’я поля) перевіряють мітку часу документа щодо даних ByteRange підписа

Якорі джерела поєднуються з ручними користувацькими якорями в тому самому ексклюзивному движку ланцюжків, який кешується за ревізією джерела та часом перевірки

Призначення джерела вимикає запасний перехід до системних коренів Windows, коли джерело чи ручний якір недоступні

TPDFlibSignatureChainReport.QualificationReport

TPDFlibEUTSLTrustSource

VerifyDocumentTimeStamp і сімейство VerifyDocumentTimeStampByName перелічують атрибути

GetSignatureTimeStampCount і VerifySignatureTimeStamp спочатку перевіряють цілісність підписа та ланцюжок підписувача на запитаний час UTC Якщо ланцюжок на запитаний час недійсний, перевіряльник перевіряє кожну мітку часу підписа та кожну мітку часу документа, чия підписана ревізія охоплює цільовий підпис, виводить найраніший довірений час підписання та найпізніший час архівації всього документа, а потім повторює перевірку ланцюжка в цих контрольних моментах доказу існування Нульовий id-aa-signatureTimeStampToken обирає поточний час UTC, а ненульове значення передається безпосередньо до політики ланцюжка сертифікатів як UTC signatureValue дозволяє довіреній мітці часу підписа чи охоплювальній мітці часу документа постачати історичний контрольний час VerifySignatureTimeStamp і VerifySignatureTimeStampByName вимагають довіреної мітки часу документа, що охоплює весь поточний документ, перш ніж поточні матеріали DSS, VRI, CRL чи OCSP можна вважати історичними доказами; інакше звіт повертає

Ex Мітка часу постачає верхню межу того, коли підписані байти існували, а не виведений час підписання, тому сертифікат підписувача, який уже був недійсним на обраний момент доказу, залишається недійсним VerifyDocumentTimeStampEx повертає запитаний і чинний звіти ланцюжка, найкращі час підписання та архівації, обране джерело доказу, кількість міток часу, стан зсуву часу і конкретний історичний статус VerifyDocumentTimeStampExByName виконує постобробку такого звіту, заповнюючи VerifySignatureTimeStampExVerifySignatureTimeStampExByName

TPDFlibTimeStampVerificationReport

Result := Verifier.VerifyAdESHistoricalByName(
  FieldName, 0, srmCacheOnly, ValidationTime, HistoricalReport);

VerifyAdESHistoricalVerifyAdESHistoricalByName

Якщо ланцюжок на запитаний час недійсний, верифікатор перевіряє кожну мітку часу підпису та кожну мітку часу документа, чия підписана ревізія покриває цільовий підпис, виводить найраніший довірений час підпису та найпізніший час архівації всього документа й повторює ланцюжок у тих контрольних моментах доведення існування

ValidationTime

srmNone

srmCacheOnlysrmOnlineahsEvidenceNotArchived

Мітка часу постачає верхню межу того, коли підписані байти існували, а не виведений час підписання, тож сертифікат підписувача, уже недійсний у вибраний момент доведення, лишається недійсним

TPDFlibAdESHistoricalValidationReport

DeriveBaselineProfileBaselineProfile

ahsValidAtRequestedTimeЦілісність і ланцюжок чинні без зсуву часу
ahsValidAtProofTimeЛанцюжок чинний у довіреному контрольному моменті, виведеному з мітки часу
ahsIntegrityInvalidОбрана мітка часу підписа чи документа не проходить перевірку цілісності або ByteRange
ahsNoTrustedProofЖодна довірена мітка часу не охоплює ревізію обраного підписа
ahsEvidenceNotArchivedПеревірку відкликання було запитано, але жодна довірена мітка часу архівації всього документа не запечатує матеріали валідації
ahsHistoricalTrustInvalidДовірені моменти доказу існують, але ланцюжок підписувача недійсний у кожному виведеному контрольному моменті

Методи сумісності

VerifySignatureGetSignatureMetadataGetSignerCertificateVerifySignerCertificateChain

ByIndex, ByName, GetSignatureMetadataByIndex і GetSignatureMetadataByName залишаються доступними та обирають поле 0 і підписувача 0 Відповідні методи GetSignerCertificateByIndex і GetSignerCertificateByName (

Див. також

TPDFlibEUTSLTrustSource, SetSignProcessDocMDP, SetSignProcessFieldLock, SetPAdESSignatureTimeStampToken