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 для обраного підписувача |
|---|---|
| CoverageStatus | scInvalid, 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