FiscalDev Tools
Voltar para o blog

Tutorial: Como Assinar XML para Envio de NF-e na SEFAZ

xml

Resumo

Categoria
XML

Introdução

A assinatura digital é o que garante a autenticidade e integridade de um XML de NF-e. Sem uma assinatura válida, a SEFAZ não autoriza o documento fiscal. Entender como funciona o processo de assinatura é essencial para qualquer desenvolvedor que trabalhe com sistemas fiscais.

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 que permite assinar qualquer conteúdo XML. Ela garante:

  • Autenticidade: Quem assinou é realmente quem diz ser
  • Integridade: O conteúdo não foi alterado após a assinatura
  • Não-repúdio: O autor não pode negar ter assinado

Como Funciona

  1. Digest do Conteúdo: O XML é processado e gerado um hash (resumo criptográfico)
  2. Assinatura do Digest: O hash é assinado com a chave privada do certificado
  3. 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. Isso garante que diferentes representações do mesmo conteúdo gerem o mesmo hash.

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

  1. Monte o XML: Com todos os campos obrigatórios
  2. Valide o schema: Use o XSD oficial da SEFAZ
  3. Gere o Digest: Calcule o hash do conteúdo a ser assinado

Passo 2: Assinar com o Certificado

  1. Extraia a chave privada: Do certificado PFX ou PEM
  2. Assine o Digest: Use o algoritmo RSA-SHA256
  3. Gere a assinatura: Crie a tag <SignatureValue>

Passo 3: Incluir no XML

  1. Posicione a assinatura: Geralmente no final do <infNFe>
  2. Referencie corretamente: Use o atributo URI correto
  3. 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: Padrão para NF-e no Brasil
  • Segurança: Alta

ECDSA-SHA256

  • Algoritmo: ECDSA com hash SHA-256
  • Curva: P-256 ou P-384
  • Uso: Certificados ICP-Brasil novos
  • Segurança: Muito alta

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:

  1. Faça upload do XML
  2. Selecione o certificado PFX
  3. Informe a senha
  4. Clique em assinar
  5. Baixe o XML assinado

Validação

Após assinar, sempre valide:

  1. Schema: Use nosso Validador XML
  2. Assinatura: Verifique com ferramentas de validação
  3. Teste: Envie para homologação antes de produção

Boas Práticas

  1. Valide o XML antes de assinar: Evite erros posteriores
  2. Use certificado válido: Verifique validade e extensões
  3. Armazene a assinatura: Guarde XML assinado para auditoria
  4. Teste em homologação: Sempre valide antes de produção
  5. 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 assinar XMLs de forma rápida e segura, sem se preocupar com os detalhes técnicos da implementação.

FiscalDev Tools

Pronto para colocar em prática?

Use nossas ferramentas gratuitas para validar XMLs, gerenciar certificados e muito mais. Tudo processado localmente no seu navegador.

Explorar ferramentas

Artigos Relacionados

Nós usamos cookies e outras tecnologias semelhantes para melhorar a sua experiência em nossos serviços, personalizar publicidade e recomendar conteúdo de seu interesse. Para mais detalhes, consulte nossa Política de Privacidade.