Resumo
Introdução
A assinatura digital fornece mecanismos para verificar a autoria associada ao certificado e a integridade de um XML de NF-e quando o perfil, a cadeia e a verificação estão corretos. Uma assinatura incompatível ou inválida pode levar à rejeição pela SEFAZ; a autorização depende também do schema e das regras de negócio.
Neste tutorial, vamos explicar o processo de assinatura XML passo a passo, incluindo XMLDSig, canonização e boas práticas.
O que é Assinatura Digital XML?
A assinatura digital XML (XMLDSig) é um padrão W3C para assinar conteúdo XML. Quando validada com o certificado e as referências corretos, ela permite verificar:
- Autenticidade técnica: O certificado apresentado corresponde à chave que produziu a assinatura
- Integridade: Alterações no conteúdo referenciado podem ser detectadas
- Vínculo documental: A assinatura registra a associação entre o conteúdo e o certificado; efeitos jurídicos dependem do contexto legal
Como Funciona
- Resumo criptográfico (digest): O XML é processado para gerar um hash
- Assinatura do Digest: O hash é assinado com a chave privada do certificado
- Inclusão no XML: A assinatura é adicionada ao documento XML
Estrutura do XMLDSig
Tags Principais
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256"/> <Reference URI="#NFe123456789"> <Transforms> <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <DigestValue>...</DigestValue> </Reference> </SignedInfo> <SignatureValue>...</SignatureValue> <KeyInfo> <X509Data> <X509Certificate>...</X509Certificate> </X509Data> </KeyInfo> </Signature>
Canonização
A canonização é o processo de normalizar o XML antes de calcular o hash. Dentro do algoritmo e das regras de canonização escolhidos, ela torna comparáveis representações equivalentes do conteúdo referenciado.
Algoritmos comuns:
- C14N: Canonical XML 1.0
- C14N2.0: Canonical XML 2.0
- Exclusive C14N: Canonização exclusiva
Processo de Assinatura
Passo 1: Preparar o XML
- Monte o XML: Com todos os campos obrigatórios
- Valide o schema: Use o XSD oficial da SEFAZ
- Gere o Digest: Calcule o hash do conteúdo a ser assinado
Passo 2: Assinar com o Certificado
- Extraia a chave privada: Do certificado PFX ou PEM
- Assine o Digest: Use o algoritmo RSA-SHA256
- Gere a assinatura: Crie a tag
<SignatureValue>
Passo 3: Incluir no XML
- Posicione a assinatura: Geralmente no final do
<infNFe> - Referencie corretamente: Use o atributo
URIcorreto - Valide a assinatura: Verifique se está correta
Algoritmos de Assinatura
RSA-SHA256
- Algoritmo: RSA com hash SHA-256
- Tamanho da chave: 2048 bits mínimo
- Uso: Pode aparecer em perfis de NF-e; confirme o manual e o destinatário
- Segurança: Depende do algoritmo, da implementação, da chave e do processo de validação
ECDSA-SHA256
- Algoritmo: ECDSA com hash SHA-256
- Curva: P-256 ou P-384
- Uso: Pode aparecer em certificados compatíveis; confirme o perfil exigido
- Segurança: Depende da curva, da implementação, da chave e do processo de validação
Erros Comuns
Reference URI Incorreto
Erro: "Reference URI not found"
Causa: O atributo URI na tag <Reference> não aponta para o elemento correto
Solução: Verifique se o URI corresponde ao id do elemento <infNFe>
Digest Inválido
Erro: "Digest verification failed"
Causa: O hash calculado não confere com o hash na assinatura
Solução: Verifique se o XML não foi alterado após a assinatura
Certificado Inválido
Erro: "Certificate not valid" ou "Key usage not supported"
Causa: O certificado não tem as extensões necessárias ou está vencido
Solução: Use um certificado válido com extensão de assinatura digital
Ferramentas Úteis
Nosso Assinador XML
Use nossa ferramenta online para assinar XMLs de NF-e:
- Selecione o arquivo XML
- Selecione o certificado PFX
- Informe a senha
- Clique em assinar
- Baixe o XML assinado
Validação
Após assinar, sempre valide:
- Schema: Use nosso Validador XML
- Assinatura: Verifique com ferramentas de validação
- Teste: Envie para homologação antes de produção
Boas Práticas
- Valide o XML antes de assinar: Evite erros posteriores
- Use certificado válido: Verifique validade e extensões
- Armazene a assinatura: Guarde XML assinado para auditoria
- Teste em homologação: Sempre valide antes de produção
- Mantenha o certificado seguro: Nunca compartilhe a chave privada
Conclusão
A assinatura XML é um processo crítico para emissão de NF-e. Compreender XMLDSig, canonização e algoritmos de assinatura é essencial para desenvolvedores fiscais.
Use nossas ferramentas para experimentar e diagnosticar assinaturas XML. Confira o perfil exigido pelo destinatário e valide o resultado em ambiente de testes antes de qualquer transmissão.
Fontes consultadas
Referências primárias usadas para conferir conceitos, padrões e regras citados neste guia.
- W3C — XML Signature Syntax and ProcessingEspecificação técnica para assinaturas digitais em XML.
- ITI — Certificação Digital ICP-BrasilInformações oficiais sobre certificados, chaves e tipos A1 e A3.
- Portal Nacional da NF-e — manuais e documentos técnicosManuais de orientação, leiautes e regras de validação de NF-e e NFC-e.
Pronto para colocar em prática?
Use nossas ferramentas gratuitas para inspecionar XMLs, gerenciar certificados e explorar dados de teste. Quando indicado na página, o processamento ocorre no navegador; confira o escopo antes de inserir dados.
Explorar ferramentasArtigos Relacionados
Estrutura Básica de um XML de NF-e: Guia Completo
Conheça a estrutura de um XML de NF-e, as tags mais comuns e como conferir o documento contra o schema vigente.
Ler maisComo Resolver Erros Comuns de Validação XML na SEFAZ
Lista completa de erros de validação XML na SEFAZ com soluções práticas. Aprenda a identificar e corrigir os erros mais comuns.
Ler mais