Biblioteca Java para assinatura digital baseada nos padrões ICP-Brasil, desenvolvida pelo SERPRO.
Suporta os formatos CAdES, XAdES e PAdES conforme as políticas do ITI (Instituto Nacional de Tecnologia da Informação).
| Módulo | Descrição |
|---|---|
core |
Infraestrutura base: gerenciamento de cadeias CA, downloads, repositório de CRL |
cryptography |
Utilitários criptográficos |
chain-icp-brasil |
Cadeia de ACs ICP-Brasil (produção) — carregada automaticamente via ServiceLoader |
chain-icp-brasil-homolog |
Cadeia de ACs ICP-Brasil (homologação) — carregada por padrão, veja Ativação/desativação de cadeias |
chain-iti |
Provider alternativo de cadeia via ITI online |
chain-serpro-neosigner |
Provider de cadeia via mirror SERPRO |
policy-engine |
Motor de políticas de assinatura — baixa e valida LPAs |
policy-impl-cades |
Assinatura CAdES (CMS Advanced Electronic Signatures) |
policy-impl-xades |
Assinatura XAdES (XML Advanced Electronic Signatures) |
policy-impl-pades |
Assinatura PAdES (PDF Advanced Electronic Signatures) |
timestamp |
Carimbo de tempo (RFC 3161) |
signer-xmldsig |
Assinatura XMLDSig básica |
Adicione o módulo desejado ao seu pom.xml. Para assinatura CAdES:
<dependency>
<groupId>org.demoiselle.signer</groupId>
<artifactId>policy-impl-cades</artifactId>
<version>4.6.2</version>
</dependency>A cadeia ICP-Brasil é carregada automaticamente se chain-icp-brasil estiver no classpath:
<dependency>
<groupId>org.demoiselle.signer</groupId>
<artifactId>chain-icp-brasil</artifactId>
<version>4.6.2</version>
</dependency>Artefatos disponíveis no Maven Central.
Requer Java 8 e Maven 3.9+.
mvn clean installPara gerar uma nova versão, use o script:
./gerar-versao.shAs principais configurações são feitas via variável de ambiente ou system property:
| Variável de ambiente | System property | Padrão | Descrição |
|---|---|---|---|
SIGNER_CA_CHAIN_CONNECTION_TIMEOUT |
signer.ca.chain.connection.timeout |
30000 |
Timeout (ms) para download de cadeias CA |
SIGNER_CRL_CONNECTION_TIMEOUT |
signer.crl.connection.timeout |
5000 |
Timeout (ms) para download de CRLs |
SIGNER_REPOSITORY_ONLINE |
signer.repository.online |
true |
Habilita/desabilita consulta online de CRLs |
SIGNER_PROXY_HOST |
signer.proxy.host |
— | Host do proxy |
SIGNER_PROXY_PORT |
signer.proxy.port |
— | Porta do proxy |
Desde a versão 4.6.2, todas as cadeias são carregadas por padrão quando suas dependências estão no classpath — inclusive as de homologação (chain-icp-brasil-homolog, chain-iti-homolog). Cada cadeia pode ser desativada individualmente via variável de ambiente:
SIGNER_DISABLE_CHAIN_<NOME_DA_CADEIA>=true
Cadeias disponíveis:
| Variável de ambiente | Módulo | Tipo |
|---|---|---|
SIGNER_DISABLE_CHAIN_ICP_BRASIL |
chain-icp-brasil |
Produção (todas as fontes: keystore, online SERPRO e repositório local) |
SIGNER_DISABLE_CHAIN_ICP_BRASIL_HOMOLOG |
chain-icp-brasil-homolog |
Homologação |
SIGNER_DISABLE_CHAIN_ITI_HOMOLOG |
chain-iti-homolog |
Homologação |
SIGNER_DISABLE_CHAIN_SERPRO_NEOSIGNER |
chain-serpro-neosigner |
Provider completo |
SIGNER_DISABLE_CHAIN_SERPRO_NEOSIGNER_HOMOLOG |
chain-serpro-neosigner |
Apenas cadeias de homologação do NeoSigner |
Exemplos:
# Desativar somente as cadeias de homologação do ICP-Brasil e do ITI
export SIGNER_DISABLE_CHAIN_ICP_BRASIL_HOMOLOG=true
export SIGNER_DISABLE_CHAIN_ITI_HOMOLOG=true
# Ou inline na execução:
SIGNER_DISABLE_CHAIN_ICP_BRASIL_HOMOLOG=true java -jar app.jarNota: variáveis de ambiente são lidas no momento do carregamento das cadeias e não podem ser alteradas em tempo de execução pelo código Java — defina-as antes de iniciar a JVM.
A variável global SIGNER_ENV seleciona o ambiente de uma só vez, quando a variável específica da cadeia não for definida:
Valor de SIGNER_ENV |
Efeito |
|---|---|
| (não definido) | Todas as cadeias carregadas (padrão) |
hom / homolog |
Cadeias de produção desativadas; só homologação |
prod / production |
Cadeias de homologação desativadas; só produção |
# Ambiente de homologação: carrega apenas cadeias HOM
export SIGNER_ENV=homA variável específica da cadeia tem precedência sobre a global. Por exemplo, com SIGNER_ENV=hom e SIGNER_DISABLE_CHAIN_ICP_BRASIL=false, a cadeia de produção ICP-Brasil permanece ativa mesmo em ambiente de homologação.
⚠️ Atenção: nunca deixe cadeias de homologação ativas em produção. Elas contêm ACs de teste e podem validar certificados falsos. Em produção, prefiraSIGNER_DISABLE_CHAIN_ICP_BRASIL_HOMOLOG=true(eSIGNER_DISABLE_CHAIN_ITI_HOMOLOG, se aplicável).
- settings.xml configurado com server
ossrh(usuário/token do central.sonatype.com) - GPG key configurada para assinatura dos artefatos
- Java 8+ e Maven 3.9+
⚠️ GPG: configuregpg.keyname,gpg.passphraseegpg.arg=--pinentry-mode/loopbackno profile dosettings.xml. Não passe-Dgpg.passphrase=""na linha de comando — isso sobrescreve a passphrase dosettings.xmle a assinatura falha comgpg: Frase secreta não fornecida.
Publica no repositório de SNAPSHOTs (https://central.sonatype.com/repository/maven-snapshots/):
mvn clean deploy -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -B
⚠️ A versão no POM não pode conter-SNAPSHOT.
mvn clean deploy -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -B \
-P releaseO profile release ativa o central-publishing-maven-plugin com <extensions>true</extensions>, que faz o upload e publish para o Maven Central.
O programa publicador.go automatiza a publicação completa:
# SNAPSHOT
go run publicador.go
# Release
go run publicador.go -releaseEle executa mvn deploy no reactor todo, com retry automático (até 20 tentativas com intervalo de 15s) e validação pós-publicação via consulta ao repositório.
Verifica se todos os módulos estão publicados no servidor e gera um relatório detalhado:
# Verificar SNAPSHOTs
go run publicador.go -validar
# Verificar releases no Maven Central
go run publicador.go -validar -releaseO relatório mostra por módulo:
- ✅ Status geral (publicado/não publicado)
- 📦 Versão e número do build
- 📋 Arquivos publicados (pom, jar, sources.jar, javadoc.jar, assinaturas .asc) com status individual
GNU Lesser General Public License v3 — SERPRO