TPDFlibSignatureVerifier
Segurança e assinaturas
Descrição
Enumera campos de assinatura PDF e signatários CMS, valida uma assinatura selecionada sem carregar o PDF completo na memória e informa a revisão incremental da própria assinatura selecionada separadamente do arquivo atual O verificador aceita um arquivo, um stream de propriedade do chamador ou uma cadeia de bytes ANSI por meio de
OpenPDF, OpenPDFStream ou OpenPDFString
Seleção
Count := Verifier.GetSignatureCount;
Verifier.GetSignatureFieldName(0, FieldName);
SignerCount := Verifier.GetSignerCount(0);
Result := Verifier.VerifySignatureByName(FieldName, 0, Report);
VerifySignatureByIndex seleciona um campo PDF pelo índice com base em zero, enquanto VerifySignatureByName usa o nome de campo AcroForm totalmente qualificado, e ambos os métodos aceitam um índice de signatário CMS com base em zero
Relatório de verificação de assinatura
| IntegrityResult | Resultado de integridade criptográfica CMS ou PKCS#7 legado para o signatário selecionado |
|---|---|
| CoverageStatus | scInvalid, scSignedRevision, or scWholeDocument |
| ByteRangeValid | Verdadeiro apenas quando todos os intervalos são limitados e a revisão assinada termina em seu próprio %%EOF |
| ContentsGapValid | Verdadeiro apenas quando os bytes omitidos são exatamente o token hexadecimal /Contents selecionado |
| HasLaterRevisions | Verdadeiro quando a assinatura selecionada autentica uma revisão incremental anterior e existem bytes posteriores |
| SignedRevisionLength | Comprimento em bytes da revisão autenticada pela assinatura selecionada |
| PermissionReport | Restrições DocMDP e FieldMDP analisadas para a assinatura selecionada |
Certificação e permissões de campos
GetSignaturePermissionInfo e GetSignaturePermissionInfoByName retornam TPDFlibSignaturePermissionReport
/Perms /DocMDP correspondente no catálogo e verifica se o dicionário /Lock de um campo corresponde à sua transformação FieldMDP, à ação e à lista de nomes de campos
Cadeia de certificados e revogação
VerifySignerCertificateChainByIndex e VerifySignerCertificateChainByName executam a validação de cadeia padrão para uma assinatura e um signatário explicitamente selecionados
VerifySignerCertificateChainEx e VerifySignerCertificateChainExByName aceitam srmNone, srmCacheOnly ou srmOnline, mais um horário de verificação opcional
TPDFlibSignatureChainReport separa TrustStatus, erros de cadeia e de política do Windows, contagens de evidências DSS ou VRI, atribuição exata de OCSP, status de OCSP, motivo de revogação, frescor e erros nativos
Certificados embutidos e material de validação podem completar uma cadeia, mas não convertem uma raiz não confiável em raiz confiável
Evidências OCSP de DSS ou VRI são aceitas apenas quando a assinatura do respondedor, o uso do emissor ou do respondedor delegado, o CertID, o status e o frescor correspondem ao certificado selecionado
Fontes de confiança externas
Verifier.AddTrustAnchorDER(RootCertificateDER);
Verifier.AddTrustAnchorFromFile('BusinessRoot.cer');
AnchorCount := Verifier.GetTrustAnchorCount;
Verifier.ClearTrustAnchors;
AddTrustAnchorDER e AddTrustAnchorFromFile adicionam certificados X.509 validados a um conjunto de âncoras de confiança em memória e sem duplicatas
Root sem enfraquecer as verificações de cadeia de certificados, uso, validade, assinatura ou revogação
TrustedPeople implementa esse contrato para documentos LOTL da UE e TSL nacionais assinados
O motor exclusivo e o repositório de raízes analisado são colocados em cache pelo verificador e reutilizados até que o conjunto de âncoras mude
Este isolamento permite que uma aplicação aplique uma política de confiança de negócio privada sem instalar certificados nem herdar confiança de máquina não relacionada
A pertença ao conjunto de âncoras de confiança não contorna verificações de validade de certificado, uso de chave, assinatura ou revogação solicitada
ClearTrustAnchors libera o conjunto e restaura o motor de confiança padrão do sistema Windows para as verificações seguintes
Carimbos de data e hora RFC 3161
Verifier.SetTrustSource(TrustSource);
Source := Verifier.GetTrustSource;
SetTrustSource (índice da assinatura) e TPDFlibSignatureTrustSource (nome do campo) validam um carimbo de data/hora do documento contra os dados ByteRange da assinatura
Âncoras da origem são combinadas com âncoras personalizadas manuais no mesmo motor de cadeias exclusivo, que é colocado em cache por revisão da origem e horário de verificação
Atribuir uma origem desabilita o retorno às raízes do sistema Windows quando nenhuma origem ou âncora manual está disponível
Uma avaliação de origem bem-sucedida popula TPDFlibSignatureChainReport.QualificationReport sem enfraquecer as verificações de cadeia de certificados, uso, validade, assinatura ou revogação
TPDFlibEUTSLTrustSource implementa este contrato para documentos LOTL da UE e TSL nacionais assinados
Carimbos de tempo RFC 3161
VerifyDocumentTimeStamp e a família VerifyDocumentTimeStampByName enumeram e validam atributos
GetSignatureTimeStampCount e a família VerifySignatureTimeStamp enumeram e validam atributos id-aa-signatureTimeStampToken contra o signatureValue do signatário CMS selecionado; VerifySignatureTimeStamp seleciona a assinatura por índice e VerifySignatureTimeStampByName por nome de campo
As variantes Ex (VerifyDocumentTimeStampEx, VerifyDocumentTimeStampExByName, VerifySignatureTimeStampEx, VerifySignatureTimeStampExByName) também aceitam modo de revogação, OID de política esperado e nonce esperado
TPDFlibTimeStampVerificationReport relata independentemente a validade da assinatura do token, a validade do message imprint, o EKU e a vinculação de nome da TSA, política, nonce, horário de geração, resultado da cadeia e status de confiança
Validação histórica AdES
Result := Verifier.VerifyAdESHistoricalByName(
FieldName, 0, srmCacheOnly, ValidationTime, HistoricalReport);
VerifyAdESHistorical e VerifyAdESHistoricalByName primeiro validam a integridade da assinatura e a cadeia do signatário no horário UTC solicitado
Se a cadeia do horário solicitado for inválida, o verificador valida cada carimbo de tempo de assinatura e cada carimbo de tempo de documento cuja revisão assinada cubra a assinatura alvo, deriva o horário de assinatura confiável mais antigo e o horário de arquivamento mais tardio do documento inteiro e repete a cadeia nesses horários de controle de prova de existência
Um ValidationTime zero seleciona o horário UTC atual, enquanto um valor diferente de zero é passado diretamente à política de cadeia de certificados como UTC
srmNone permite que um carimbo de tempo de assinatura confiável ou um carimbo de tempo de documento cobertor forneça o horário de controle histórico
srmCacheOnly e srmOnline exigem um carimbo de tempo de documento confiável que cubra o documento atual completo antes de que material atual de DSS, VRI, CRL ou OCSP possa ser tratado como evidência histórica; caso contrário, o relatório retorna ahsEvidenceNotArchived
Um carimbo de tempo fornece um limite superior de quando os bytes assinados existiram, e não um horário de assinatura inferido, então um certificado de signatário que já era inválido no horário de prova selecionado permanece inválido
TPDFlibAdESHistoricalValidationReport retorna relatórios de cadeia solicitado e efetivo, os melhores horários de assinatura e de arquivamento, a origem de prova selecionada, contagens de carimbos de tempo, estado de deslize temporal e um status histórico específico
DeriveBaselineProfile pós-processa um desses relatórios, preenchendo BaselineProfile a partir do subfiltro de assinatura junto com as evidências de carimbo de tempo e DSS já coletadas no relatório
ahsValidAtRequestedTime | A integridade e a cadeia são válidas sem deslizamento temporal |
|---|---|
ahsValidAtProofTime | A cadeia é válida em um horário de controle derivado de carimbo de data/hora confiável |
ahsIntegrityInvalid | O carimbo de tempo de assinatura ou de documento selecionado falha na validação de integridade ou de ByteRange |
ahsNoTrustedProof | Nenhum carimbo de data/hora confiável cobre a revisão da assinatura selecionada |
ahsEvidenceNotArchived | A verificação de revogação foi solicitada, mas nenhum carimbo de data/hora de arquivamento de todo o documento confiável sela o material de validação |
ahsHistoricalTrustInvalid | Existem horários de prova confiáveis, mas a cadeia do signatário é inválida em todos os horários de controle derivados |
Métodos de compatibilidade
VerifySignatureGetSignatureMetadataGetSignerCertificateVerifySignerCertificateChain
ByIndex, ByName, GetSignatureMetadataByIndex e GetSignatureMetadataByName permanecem disponíveis e selecionam o campo 0 e o signatário 0
Os métodos GetSignerCertificateByIndex e GetSignerCertificateByName correspondentes (
Veja também
TPDFlibEUTSLTrustSource, SetSignProcessDocMDP, SetSignProcessFieldLock, SetPAdESSignatureTimeStampToken