DEV Community

alexsetta
alexsetta

Posted on

Assinando arquivos PDF com certificado digital em Go

Desenvolver uma solução para assinar PDFs com certificado digital (PFX) em Go se mostrou um desafio considerável, apesar do escopo inicial parecer simples. Após a conclusão, a implementação aparenta ser direta (são apenas 180 linhas), mas o processo exigiu várias iterações e entendimento detalhado sobre as limitações das ferramentas e bibliotecas disponíveis.

A primeira abordagem consistiu em tentar, de forma monolítica, ler o PDF, aplicar o carimbo visual e assinar digitalmente em uma única etapa. No entanto, surgiram diversos entraves — em especial, a perda da assinatura digital após a inserção do carimbo, e erros decorrentes da manipulação do documento. Adicionalmente, muitas soluções baseadas em IA indicavam bibliotecas pagas ou APIs externas, ou ainda métodos inexistentes nas bibliotecas, tornando a busca por alternativas viáveis um processo repetitivo e pouco produtivo.

O fluxo mais robusto — e funcional — consolidou-se apenas após dividir o processo em etapas claras, conforme observado no código do projeto:

  1. Leitura do PDF bruto: carregamento do arquivo a ser assinado;
  2. Leitura e parsing do certificado PFX: extração das chaves necessárias para assinatura;
  3. Inserção do carimbo (imagem): a adição do elemento visual que representa a assinatura, por demanda de reconhecimento prático do usuário final, ocorre antes da assinatura digital;
  4. Normalização do PDF: ajuste do documento após inserção da imagem, garantindo a integridade estrutural e a compatibilidade com o processo de assinatura;
  5. Assinatura digital do PDF: aplicação efetiva da assinatura criptográfica utilizando o certificado PFX.

Um ponto importante, que é óbvio, mas não custa lembrar, é que qualquer modificação posterior à assinatura — como a inclusão de imagens ou objetos — invalida a assinatura digitalizada, tornando mandatório inserir o carimbo antes do processo criptográfico. Além disso, a necessidade de normalização após manipular o PDF se fez evidente para corrigir eventuais inconsistências introduzidas no fluxo.

O resultado final é um pipeline previsível e robusto, fiel às boas práticas de assinatura digital de documentos PDF — solução já disponível para uso público em: https://github.com/alexsetta/pdfsigner.

Top comments (0)