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:
- Leitura do PDF bruto: carregamento do arquivo a ser assinado;
- Leitura e parsing do certificado PFX: extração das chaves necessárias para assinatura;
- 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;
- 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;
- 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)