ShieldSign PKIDocumentação

Verificar assinaturas

Conferir as assinaturas de um PDF, com erros e avisos prontos para a tela.

POST /v1/signature-verifications confere todas as assinaturas de um PDF contra as raízes de um contexto de segurança e devolve o resultado em um formato pronto para a tela.

$v = $api->verify(file_get_contents($pdf), 'icp-brasil');

$v['allValid'];                        // true só se TODAS as assinaturas estão "valid"
foreach ($v['signatures'] as $s) {     // status: valid | invalid | untrusted | revoked | modified_after_signing
    echo $s['signer']['subjectName'], ' ', $s['status'], ' ', $s['policy']['name'] ?? 'sem política', "\n";
}
$v['ltv']['dss'];                      // o PDF carrega LCR/OCSP embutidos (AD-RC e AD-RA)?
const r = await client.verifyPades({ pdf, securityContextId: "icp-brasil" });
console.log(r.allValid, r.signatures.map((s) => `${s.signer.subjectName}: ${s.status}`));

Em AD-RA aparece também um item com kind: "document_timestamp" (o carimbo do documento). O signatureCount conta só assinaturas de pessoas.

O que cada assinatura traz#

  • signer: nome, issuerName, issuerDn, issuerCn e o bloco pkiBrazil (Identidade do certificado).
  • status: valid, invalid, untrusted, revoked ou modified_after_signing.
  • signingTime: a data declarada pelo próprio signatário. Sem carimbo de tempo, ela não prova quando a assinatura foi feita.
  • timestamp: o carimbo de tempo (present, time, valid, trusted).
  • policy: a política ICP-Brasil declarada, quando houver.
  • messages: erros e avisos já em português, cada um com level (error ou warning), um code estável e o text para a tela.

Decida pelo code, nunca pelo texto:

code level Quando
invalid, unreadable error A assinatura não confere com o conteúdo, ou é ilegível.
untrusted, revoked error A cadeia não chega a uma raiz do contexto, ou o certificado foi revogado.
modified_after_signing error O documento foi alterado depois desta assinatura.
timestamp_missing warning Sem carimbo de tempo: a data é só a declarada pelo signatário.
later_visible_signature warning Outra assinatura visível foi acrescentada depois desta (later_visible traz o campo, a posição e a fração da página): confira se o selo dela não cobre o documento.
later_visible_covers_content error A assinatura visível posterior ocupa mais de 10% da página e pode ter coberto o conteúdo assinado: esta assinatura passa a modified_after_signing.
timestamp_invalid, timestamp_untrusted warning O carimbo está presente mas não confere, ou a autoridade de carimbo não é confiável.
policy_unknown_or_altered, policy_not_in_force warning A política ICP-Brasil declarada não consta na lista oficial, ou está fora de vigência.

allValid é "todas as assinaturas valid". O aviso de carimbo ausente não reprova (é uma ressalva), mas mostre-o ao usuário em AD-RT, AD-RC e AD-RA, onde a data precisa de prova.

Vários signatários#

Quando outra pessoa assina depois, o PDF muda (entra a nova assinatura), e as anteriores continuam valid: coversWholeFile é falso e laterSignatures lista as que vieram depois. Veja Vários signatários.

Cobrança#

Cada verificação é registrada como uma transação própria, com preço definido no seu plano. Veja Limites e cotas.

ShieldSign PKI · Shield Certificadora · contato@shieldcertificadora.com.br · Privacidade