Verificação de Assinatura PDF O que os Desenvolvedores Precisam Saber
A maioria dos desenvolvedores encontra PDFs assinados sem saber o que a assinatura criptográfica realmente garante. Aqui está o que você precisa saber para verificar corretamente a assinatura do PDF.
A maioria dos desenvolvedores já trabalhou com PDFs assinados — um contrato assinado, um comprovante bancário certificado, um formulário governamental. Mas o que significa 'assinado' varia de acordo com quem está falando. O traço visual no campo de assinatura e a assinatura criptográfica incorporada no arquivo são duas coisas totalmente diferentes. Apenas uma delas realmente garante algo.
Este guia aborda como as assinaturas digitais em PDF funcionam, o que significam os diferentes estados de validade e como verificá-las de forma programática.
A Assinatura que Você Vê vs. a Assinatura que Importa
Quando alguém "assina" um PDF com uma ferramenta de desenho ou selo de imagem, está colocando uma imagem de assinatura na página. Parece oficial, mas não possui garantia de segurança. Qualquer pessoa pode copiar essa imagem para outro documento.
Uma assinatura digital é diferente. É um artefato criptográfico incorporado na estrutura do PDF — separado de qualquer elemento visual. Quando um documento é digitalmente assinado:
- É calculada uma hash do conteúdo do documento.
- Essa hash é criptografada com a chave privada do assinante.
- A hash criptografada (a assinatura) é armazenada no PDF juntamente com a cadeia de certificados do assinante.
Ao verificar a assinatura, você a descriptografa usando a chave pública do certificado, recalcula a hash a partir do conteúdo atual do documento e as compara. Se forem iguais, o documento não foi modificado desde a assinatura. Se não forem iguais — ou se o certificado não for confiável — a assinatura é inválida.
Quatro Estados de Validade da Assinatura
Nem todas as assinaturas digitais são iguais. Quando você verifica a assinatura PDF, poderá encontrar um dos quatro estados:
| Estado da Assinatura | O que significa | O que fazer |
|---|---|---|
| Válido | A hash corresponde, a cadeia de certificados é confiável e o certificado estava ativo no momento da assinatura | Confie na assinatura — verifique a identidade do assinante contra o certificado esperado |
| Inválida | O conteúdo do documento foi alterado após a assinatura, ou os dados da assinatura estão corrompidos | Rejeite o documento; ele foi alterado ou está mal formatado |
| Desconhecida | A estrutura da assinatura está intacta, mas o certificado não pode ser verificado (raiz não confiável, OCSP ausente, etc.) | Não é possível confiar na assinatura — solicite um novo documento assinado ou obtenha o certificado de raiz confiável |
| Revocada | O certificado estava válido no momento da emissão, mas foi posteriormente revocado pelo CA (por exemplo, comprometimento da chave) | Rejeite, a menos que os dados LTV comprovem que o certificado estava válido antes da revocação |
O estado "Desconhecido" confunde a maioria dos desenvolvedores. Uma assinatura estruturalmente correta com um certificado autoassinado ou interno de empresa exibe como "Desconhecida" em muitas ferramentas porque essas ferramentas não conseguem alcançar o emissor. Em fluxos de documentos internos, você pode confiar explicitamente nessa raiz; para documentos de partes externas, o estado "Desconhecido" não é aceitável.
Validação de Longo Prazo (LTV): Por que os timestamps importam
Certificados expiram. Se alguém assinou um documento há cinco anos e o certificado já expirou, a assinatura ainda é válida?
Depende da Validação de Longo Prazo (LTV). Quando a LTV está incorporada, o PDF contém:
- Um timestamp confiável de uma autoridade de timestamp (TSA)
- Respostas OCSP ou dados CRL que confirmam o status do certificado no momento da assinatura
Com LTV, é possível provar que o certificado estava válido no momento da aplicação da assinatura — mesmo após a expiração. Sem LTV, é possível verificar apenas a assinatura contra o status atual do certificado, o que torna impossível após a expiração do certificado ou a desativação do responder OCSP.
Para contratos ou documentos regulatórios com exigências de retenção prolongada (7 anos ou mais em muitos jurisdições), a LTV não é opcional. Sempre verifique a presença dela ao construir fluxos de verificação de assinatura.
Verificação de Assinaturas PDF de forma programática
Usando Python com pypdf
O pypdf A biblioteca fornece acesso aos campos de assinatura do PDF e aos seus metadados subjacentes. A seguir, um exemplo mínimo para verificar se um PDF possui assinaturas digitais e ler seus estados:
import sys
from pypdf import PdfReader
def check_pdf_signatures(path: str) -> None:
reader = PdfReader(path)
sig_fields = [
name for name, field in (reader.get_fields() or {}).items()
if field.get("/FT") == "/Sig"
]
if not sig_fields:
print("No digital signature fields found.")
return
print(f"Found {len(sig_fields)} signature field(s):")
for name in sig_fields:
sig_obj = reader.get_fields()[name]
sig_dict = sig_obj.get("/V")
if not sig_dict:
print(f" {name}: field present but unsigned")
continue
signer_name = sig_dict.get("/Name", "Unknown")
signing_time = sig_dict.get("/M", "No timestamp")
reason = sig_dict.get("/Reason", "")
location = sig_dict.get("/Location", "")
print(f" {name}:")
print(f" Signer: {signer_name}")
print(f" Time: {signing_time}")
if reason:
print(f" Reason: {reason}")
if location:
print(f" Location: {location}")
if __name__ == "__main__":
check_pdf_signatures(sys.argv[1])
Isso lê os metadados da assinatura diretamente da estrutura do PDF. Para verificação criptográfica completa — confirmar a hash e validar a cadeia de certificados — use pyhanko ou endesive, ambas as quais envolvem a camada de verificação PKCS#7.
Usando qpdf na linha de comando
Para inspeção rápida na linha de comando sem necessidade de ambiente Python:
# Show encryption and signature info
qpdf --show-encryption input.pdf
# Full JSON output with signature details
qpdf --json input.pdf | python3 -m json.tool | grep -A 20 '"sig"'
qpdf É útil em pipelines CI ou scripts em shell, onde a configuração de um ambiente virtual Python adiciona sobrecarga desnecessária.
Cenários Comuns de Verificação
Contratos assinados por clientes — Verifique tanto o estado de validade quanto o emissor do certificado. Uma assinatura válida de um certificado de raiz não confiável (autoassinado) não oferece garantia externa. Você está confiando na pessoa que gerou a chave.
Documentos governamentais e regulatórios — Esses geralmente usam autoridades de certificados nacionalmente confiáveis. Verifique que a cadeia de certificados se conecte à raiz CA esperada, e não apenas que a assinatura seja exibida como "válida".
Comprovantes bancários e faturas — Muitos são assinados em lote usando certificados de assinatura de documentos emitidos a uma organização. O nome do assinante refletirá a instituição, e não um funcionário individual.
Verificação Sem Escrever Código
Se você precisa verificar rapidamente um arquivo de assinatura PDF sem configurar um ambiente de desenvolvimento, o IO Tools Verificador de Assinatura PDF permite que você carregue um arquivo e veja os detalhes da assinatura instantaneamente — útil para verificação pontual ou para testar amostras de arquivos antes de construir um pipeline de produção.
Instale nossas extensões
Adicione ferramentas de IO ao seu navegador favorito para acesso instantâneo e pesquisa mais rápida
恵 O placar chegou!
Placar é uma forma divertida de acompanhar seus jogos, todos os dados são armazenados em seu navegador. Mais recursos serão lançados em breve!
Ferramentas essenciais
Ver tudo Novas chegadas
Ver tudoAtualizar: Nosso ferramenta mais recente was added on Mai 30, 2026
