No último artigo da série abordamos e exemplificamos os aspectos envolvidos na especificação, aquisição e uso de certificados digitais para aplicações de NFe, mais especificamente os certificados digitais da CertiSign. Desta forma os leitores tiveram contato com um caso de sucesso cujo detalhamento da documentação deixa os leitores mais tranqüilos em realizar os investimentos necessários.
A NF-e é um documento emitido e
armazenado eletronicamente, com validade jurídica garantida por processo de
assinatura digital. O principal objetivo da implantação desta nova modalidade é
o acompanhamento em tempo real das operações comercias pelo Fisco e a
substituição do modelo atual de emissão de documentos fiscais em papel, de forma
a simplificar uma série de obrigações do contribuinte. Maiores informações podem
ser obtidas através do portal nacional em
www.nfe.fazenda.gov.br
Seguindo a linha de publicações voltadas às soluções para Nota Fiscal Eletrônica
(NF-e) damos continuidade a esta série mantendo o foco no processo de assinatura
digital dos mesmos, onde uma vez definido o certificado a ser utilizado,
partimos para demonstrar de forma simples e prática como é possível assinar
digitalmente, a partir da sua aplicação, os arquivos XML gerados. Para realizar
o processo de assinatura utilizamos a assinaturaNFe32dll.dll.
Gerando uma NF-e para testes de
assinatura
Para testar a assinatura digital em uma NF-e de teste, utilizamos o aplicativo
disponibilizado no site
http://www.igara.com.br/produto.php?cod_produto=114 . O aplicativo mostrado
da Figura 01 é um demo desenvolvido em Delphi, totalmente funcional que permite
a geração de NF-e a partir de informações digitadas pelo usuário em campos de
texto que seguem o layout específico vigente.
Após abrir o aplicativo, clicamos no botão “Nova NF-e” e depois no botão “Salvar
NF-e”. Por fim selecionamos o diretório onde desejamos salvar o arquivo .XML
gerado. O aplicativo sugere um nome para o arquivo gerado e este nome não deve
ser alterado, pois segue padrão de nomenclatura específico exigido com base no
conteúdo da NF-e em questão.

Figura 01:
Aplicativo em Delphi para geração de NF-e
O arquivo gerado pode ser visualizado no Internet Explorer ou em qualquer outro
browser de internet com suporte a XML, e o resultado é conforme mostrado na
Figura 02.
Neste artigo não entraremos em detalhes sobre o processo de geração da NF-e,
pois este será o tema de outros artigos que virão.

Figura 02: Arquivo .xml
de NF-e visualizado no Internet Explorer
Até o momento, o arquivo gerado não tem valor jurídico, pois ainda não foi
assinado de forma que o emissor possa certificar a validade das informações
fornecidas, bem como não há nada que garanta que este documento não foi alterado
por terceiros sem o conhecimento prévio do emitente.
Para tanto, é preciso assinar este documento. Em edições anteriores demonstramos
como utilizar o aplicativo de assinatura de NF-e disponibilizado para download
gratuito no portal oficial da NF-e em www.nfe.fazenda.gov.br. No entanto, neste
artigo o objetivo é demonstrar como assinar digitalmente os arquivos a partir da
sua própria aplicação, e para isso utilizaremos a assinaturaNFe32dll.dll.
Assinatura de NFe com
uso da assinaturaNFe32dll.dll
Para demonstrar como é
fácil assinar uma NFe, utilizaremos a assinaturaNFe32dll.dll e o aplicativo demo
que acompanha a mesma pode ser obtido a partir do site
http://www.igara.com.br/produto.php?cod_produto=114 .
Após o download, executamos o aplicativo e clicamos no botão “1. Selecione o
arquivo XML da NFe”. Um componente da classe TOpenDialog é utilizado para
apresentar ao usuário uma caixa de seleção de arquivos, onde o mesmo indicará o
arquivo .XML a ser assinado. O código do evento OnClick do botão é conforme
mostrado a seguir.
|
procedure TForm1.Button12Click(Sender: TObject);
begin
opendialog1.InitialDir := ExtractFileDir(application.ExeName);
if OpenDialog1.Execute then
begin
nfe_filename := OpenDialog1.FileName;
WebBrowser1.Navigate(nfe_filename);
memo1.Lines.LoadFromFile(nfe_filename);
end;
end; |
A Figura 03 apresenta o resultado da
execução de tal procedimento, onde após a seleção do arquivo .XML, o mesmo é
carregado em componentes da classe TMemo e TWebBrowser, conforme mostrado no
lado esquerdo da Figura 03.

Figura 03:
Aplicativo demo de assinatura de NF-e. Seleção da NF-e a ser assinada.
Uma vez carregado o arquivo desejado clique no botão “2. Assinar NFe
Selecionada” para dar início ao processo de assinatura. O código executado no
evento OnClick do botão é conforme segue.
O procedimento executa uma chamada à função fncAssinarXML contida na dll
passando como parâmetro do tipo TStrings as linhas do arquivo .XML carregado
anteriormente. O resultado da chamada da função é atribuído a um segundo
componente da classe TMemo.
Se tudo estiver correto, o retorno da função fncAssinarXML será o arquivo da
Nota Fiscal Eletrônica devidamente assinado. Caso contrário, o retorno será uma
String vazia.
|
procedure TForm1.Button1Click(Sender: TObject);
var
nfe_assinada: String;
begin
try
nfe_assinada := fncAssinarXML(memo1.Lines);
memo2.Lines.Text := copy(nfe_assinada, 4, length(nfe_assinada));
except
exit;
end;
if memo2.Lines.Count > 0 then
showmessage('NFe assinada com sucesso');
end; |
No momento da execução do código
apresentado, surgirá uma tela para seleção do certificado digital a ser
utilizado no processo de assinatura, conforme mostrado na Figura 04. Importante
ressaltar que nesta tela é possível verificar as informações contidas no
certificado, de forma a diferenciar os certificados entre si, para os casos de
mais um certificado disponível em uma mesma máquina.

Figura 04: Seleção
de certificado a ser utilizado no processo de assinatura.
Após selecionar o certificado
desejado, clique no botão “Ok”. Surgirá então a tela apresentada na Figura 05 a
seguir. Neste momento, para finalizar o processo e efetivamente assinar o
documento é preciso se fornecer a senha de registro do certificado digital
selecionado. Conforme abordado no artigo anterior no momento da aquisição do
token, uma senha de acesso deve ser fornecida, sendo pessoal e intransferível,
onde somente através dela é possível se utilizar das funcionalidades do
certificado.

Figura 05:
Confirmação de senha para uso do certificado.
Após preencher a senha e clicar no botão “Ok”, o arquivo .XML selecionado
anteriormente será assinado e o conteúdo do XML assinado será apresentado
conforme demonstrado na Figura 06 a seguir.

Figura 6:
Aplicativo demo de assinatura de NF-e. Assinatura da NF-e.
Agora basta clicar no botão “3. Salvar NFe Assinada” para que o procedimento de
OnClick do botão execute a chamada a um componente da classe TSaveDialog,
utilizado para apresentar ao usuário uma caixa de seleção de arquivos, onde o
mesmo indicará o local onde o arquivo .XML assinado deve ser salvo. O código do
evento OnClick do botão é conforme mostrado a seguir.
|
procedure TForm1.Button2Click(Sender: TObject);
begin
try
savedialog1.InitialDir := ExtractFileDir(application.ExeName);
SaveDialog1.FileName := ExtractFileName(nfe_filename);
if savedialog1.Execute then
memo2.Lines.SaveToFile(savedialog1.filename);
except
exit;
end;
showmessage('Arquivo de NFe salvo com sucesso')
end; |
Qual o código necessário para chamar a função de assinatura da dll e executar
esta aplicação? Primeiramente é preciso fazer a declaração da função da dll
conforme mostrado a seguir
|
var
Form1: TForm1;
nfe_filename: String;
implementation
{$R *.dfm}
Function fncAssinarXML(sXml: TStrings): String; StdCall; external 'assinaturaNFe32dll.dll'; |
Uma vez feita a declaração, é preciso realizar uma única chamada à função de
assinatura da dll conforme mostrado
|
memo2.Lines.Text := fncAssinarXML(memo1.Lines); |
Note que não foi preciso ter nenhum conhecimento aprofundado sobre como se dá o
processo de assinatura digital, e dessa forma abstrai-se completamente a camada
relativa às funções necessárias e tecnologias utilizadas. Com a chamada de uma
única função o arquivo desejado já está assinado!
A diferença entre o arquivo não assinado e o arquivo assinado digitalmente
estará no conteúdo das últimas chaves do arquivo XML em questão, que
anteriormente estavam sem preenchimento, e após a assinatura terão um conteúdo,
conforme mostrado na Figura 07.

Figura 07: Arquivo
.xml de NF-e após o processo de assinatura
Após o processo de assinatura, os campos de DigestValue, SignatureValue e
X509Certificate passaram a conter dados criptografados que identificam
unicamente o arquivo .XML em questão e atestam que o mesmo foi assinado somente
por pessoa detentora de determinado token e da senha de acesso do mesmo.
Uma vez assinada, podemos abrir e visualizar a NF-e, utilizando outro aplicativo
oficial disponível para download no portal da NF-e em
www.nfe.fazenda.gov.br
, o aplicativo Visualizador de NF-e.
Após fazer o download e instalação do aplicativo, basta clicar em Menu> Nota
Fiscal> Abrir e selecionar o arquivo XML da NF-e assinada, e o resultado final
será conforme mostrado na Figura 08. Se tudo correu bem, a nota fiscal será
visualizada conforme mostrado a seguir. Caso existe algum problema uma mensagem
de erro será apresentada.

Figura 08: Arquivo .xml
de NF-e, devidamente assinado, aberto no visualizador oficial do governo.
Uma vez aberta a NF-e, podemos ainda verificar a assinatura digital da mesma,
clicando em Menu> Verificar> Assinatura Digital.
Um bom teste a ser feito pelo leitor, é abrir a NF-e no NotePad ou qualquer
outro editor de texto e alterar o conteúdo de qualquer nó do arquivo XML, mesmo
que seja apenas uma letra. O que acontece se você acessar o programa
Visualizador e pedir para verificar a Assinatura Digital novamente? O resultado
do teste da assinatura digital será inválido! Claro, a assinatura identifica
unicamente o arquivo e garante que não houve alterações durante as etapas do
processo.
Pronto! O arquivo da NF-e está pronto para ser enviado! Mas, por enquanto é só,
pois o processo de envio da NF-e será tema de outros artigos que virão. Continue
acompanhando a coluna pois em breve teremos mais artigos sobre o tema.
Sobre a
assinaturaNFe32dll.dll
A assinaturaNFe32dll.dll é um produto desenvolvido para facilitar e agilizar o
processo de assinatura digital de arquivos de Nota Fiscal Eletrônica. O objetivo
é disponibilizar uma solução simples e acessível a todos os desenvolvedores
onde, através da chamada de uma única função, seja possível se indicar o
conteúdo a ser assinado, abstraindo a complexidade desta camada, que envolve
conhecimentos aprofundados acerca de funções e tecnologias de certificação.
Sendo assim a dll contém um única função que recebe como parâmetro uma variável
TStrings com o conteúdo a ser assinado e retorna o conteúdo devidamente assinada
como String. Mais simples que isso, impossível!
|
Function fncAssinarXML(sXml: TStrings): String; StdCall; external 'assinaturaNFe32dll.dll'; |
O uso da dll permite ao desenvolvedor abstrair completamente a camada de
assinatura do arquivo magnético, dispensando o estudo e aprofundamento teórico
relativo às ferramentas e funções complexas aplicadas no processo.
O produto é uma solução pioneira no mercado e dá ao desenvolvedor total
flexibilidade para implementar recursos de Nota Fiscal Eletrônica em suas
aplicações, adequando seus sistemas às obrigações exigidas pelo Fisco.
Maiores informações, bem como o download do demo de uso do produto e da versão
de avaliação 100% funcional da assinaturaNFe32dll.dll pode ser feito pelo site
http://www.igara.com.br/produto.php?cod_produto=114
Descrição Simplificada do Processo
De maneira simplificada
o modelo operacional da NF-e pode ser assim descrito:
1. A empresa emissora da NF-e gera um arquivo eletrônico
contendo as informações fiscais da operação comercial em questão.
a. O arquivo eletrônico tem extensão
.XML (Extensible Markup Language) e deve ser gerado conforme padrão
pré-estabelecido vigente.
b. Este documento eletrônico contém informações equivalentes às informações
contidas no modelo atual de notas fiscais em papel.
2. O
documento da NF-e emitido deve ser assinado digitalmente, de maneira a garantir
a integridade dos dados, a autoria do emissor e a validade jurídica do
documento.
a. O processo de assinatura digital
deve ser feito utilizando-se certificado digital tipo A1 ou A3 emitido por
autoridade certificadora credenciada pela Infra-estrutura de Chaves Públicas
Brasileira – ICP-Brasil (
www.icpbrasil.gov.br ).
b. Neste artigo foram utilizados
certificados emitidos pela empresa CertSign (
www.certisign.com.br
), devidamente credenciada no ICP-Brasil.
c. A escolha do fornecedor do
certificado abordado neste artigo se deu primeiramente pela CertSign ser
devidamente certificada no ICP-Brasil e também pelo fato de ser uma das empresas
líderes deste mercado e dispor de Autoridade de Registro (AR) sediada em nossa
cidade, Salvador – Ba. No entanto sinta-se o leitor livre para escolher entre
qualquer uma das empresas disponíveis no mercado, todas elas dispõem de
processos semelhantes aos apresentados e toda a teoria mostrada no que tange a
NF-e continua sendo válida.
3. O
arquivo deve então ser transmitido, via Internet, para a Secretaria da Fazenda
do Estado (SEFAZ) onde reside o contribuinte emissor.
4.
Após receber o arquivo, a SEFAZ realiza um processo de pré-validação e devolve
uma Autorização de Uso, permitindo com isso o trânsito da mercadoria e a
continuação da transação comercial.
5.
Para acompanhar o trânsito da mercadoria o sistema deve imprimir, em papel
comum, geralmente em única via, uma representação gráfica simplificada da NF-e,
chamada de DANFE (Documento Auxiliar da Nota Fiscal Eletrônica)
a. O DANFE deve conter impressa uma
chave de acesso que possibilita a consulta da NF-e na internet, de forma que
qualquer pessoa possa confirmar as informações impressas com as informações
contidas no site da SEFAZ.
b. O DANFE não é uma nota fiscal, nem
a substitui, servindo apenas como instrumento auxiliar para consulta da NF-e na
internet.
Atualmente, conforme
consta no FAQ disponível no portal da NF-e, o Protocolo ICMS 30/07 alterou o
Protocolo ICMS 10/07 e estabeleceu a obrigatoriedade de utilização NF-e a partir
de 1º de abril de 2008, para os seguintes tipos de contribuintes que estejam
localizados nos Estados signatários deste protocolo:
• fabricantes e distribuidores de cigarros.
• distribuidores, produtores, formuladores e importadores de
combustíveis líquidos, assim definidos e autorizados por órgão federal
competente.
• transportadores e revendedores retalhistas – TRR - assim
definidos e autorizados por órgão federal competente.
Para os demais contribuintes, a estratégia de implantação nacional é que estes,
voluntária e gradualmente, independente do porte, se interessem por emitir Nota
Fiscal Eletrônica.
Certificados Digitais
Os certificados digitais são documentos eletrônicos que identificam pessoas
físicas ou jurídicas e através do uso de criptografia asseguram a
confiabilidade, privacidade, integridade, inviolabilidade e autenticidade de
informações de transações realizadas via Internet.
Os conceitos detalhados sobre certificados digitais foram abordados em artigo
anterior intitulado “Certificação Digital para NFe, Abordagem Prática para
CertSign” cuja leitura é altamente recomendada para o melhor entendimento do
presente artigo.
Conclusão
Com este artigo abordamos conceitos gerais sobre assinatura digital no que tange
a NF-e, e vimos como é fácil emitir e assinar tais documentos. A NF-e já é uma
realidade, e muito em breve todos serão obrigados a adotar este novo formato.
Mesmo as empresas não obrigadas, estão interessadas em ter seus sistemas
atualizados para trabalhar nesta nova modalidade de emissão de documentos
fiscais.
Demos continuidade à nossa série de artigos sobre NFe, e desta vez, demonstramos
como realizar de forma simples e prática a assinatura digital a partir da sua
aplicação, com o uso da assinaturaNFe32dll.dll. De agora em diante, assinar uma
Nota Fiscal Eletrônica é questão apenas de chamar uma função e indicar o
conteúdo a ser assinado, simples assim!
Victory
Fernandes é Professor do Departamento de Engenharia da UNIFACS,
Engenheiro Mestrando em Redes de Computadores, e desenvolvedor sócio da TKS
Software - Soluções de Automação e Softwares Dedicados. Pode ser contatado em
victory@igara.com.br , ou através dos
sites www.igara.com.br
–
www.igara.com.br/victory
|