| name | assinar-pdf-icp |
| description | Assina PDF com certificado ICP-Brasil (A1/A3, token ou nuvem) pelo Windows Certificate Store. Disparar quando o usuário pedir para "assinar PDF com meu certificado", "assinatura digital ICP", "assinar com e-CPF/e-CNPJ/e-OAB", "assinar com token/RemoteID", ou quando o Acrobat não estiver disponível. Windows apenas. |
Assinar PDF com certificado ICP-Brasil (Windows)
Esta skill assina PDFs com o certificado do usuário (A1 ou A3, inclusive em nuvem)
usando o Windows Certificate Store. A chave nunca sai da máquina; o provedor do
Windows pede PIN/OTP na hora.
Pré-requisitos (verifique antes)
- Windows + JDK 11+ instalado (
java -version). Se faltar, oriente a instalar o Eclipse Adoptium.
- Repositório preparado: a pasta
out/ (compilada) e lib/ (dependências) devem existir.
Se não existirem, rode scripts\setup.ps1 (baixa PDFBox + BouncyCastle e compila).
Passo a passo
-
Descubra o alias do certificado:
java -cp "out;lib\*" SignPdf --list
Mostre a lista ao usuário e confirme qual certificado usar (os marcados [ASSINÁVEL]).
-
Assine. Pergunte se o usuário quer selo visual.
-
Avise o usuário que, ao rodar, o app do certificado (token/nuvem) vai pedir
PIN + OTP. Quem informa o PIN é o usuário — você nunca pede nem registra o PIN.
-
Valide a assinatura gerada (gate determinístico, não confie só no "OK"):
java -cp "out;lib\*" VerifySig <SAIDA>-assinado.pdf
E recomende a validação oficial em https://validar.iti.gov.br.
Regras de segurança (importante)
- Nunca registre, peça por escrito, ou inclua em logs o PIN/senha/OTP do usuário.
- Nunca invente dados pessoais (nome, OAB, CPF) no selo — use só o que o usuário fornecer.
- O parâmetro
--out deve ser um arquivo NOVO; não sobrescreva o original sem confirmar.
- Não faça commit de PDFs assinados nem de selos pessoais (já estão no
.gitignore).
Solução de problemas
- "alias não encontrado" → rode
--list e use o nome exato.
- Acentos quebrados no selo → recompile com
javac -encoding UTF-8.
- Selo gigante/minúsculo → ajuste
--stamp-width (em pontos; 180 é um bom começo).
- "OCR/keystore não carrega" → confirme que é Windows e que o certificado aparece em
certmgr.msc (Pessoal).