Jump to content

Promoção de Natal SAC Mensal

Contrate e ganhe 1 Kit agenda + Caneta
Saiba mais

LANÇAMENTO
Curso Completo - Dominando o ACBrMonitor

Conheça o Curso

Balança SM100 performance surpreendente

Tecnologia Japonesa   Teclado e Visor resistentes a água
Consumo inteligente de etiquetas   Baixo custo de manutenção
Comunicação Ethernet e WIFI independentes

Saiba mais

Impressora de Etiquetas ELGIN - L42 PRO

Protocolos PPLA, PPLB, ZPL, EPL (automático)
Porta USB padrão Opcionais: Ethernet, Serial, Paralela
Sensor de Etiquetas Móvel Garantia de 18 meses

Saiba mais

Sign in to follow this  
casagrande.powersoft

ANSWERED Savefiletxt_Registrosecf - Assinatura Inválida

Recommended Posts

Bom dia!
 
Gerei as chaves e o arquivo "Empresa Teste.xml" com ProgramTestEad do jACBrFramework 0.9.6.6 e copiei o XML para a pasta SHouse da pasta raiz do eECFc v 3.28. Gerei o arquivo "Registros do PAF-ECF" a que se refere o item 17 do REQUISITO VII Registros do PAF-ECF com a minha aplicação utilizando o método "acbrPaf.saveFileTXT_RegistrosECF(nomeArquivo)" e o submeti a validação da assinatura eECFc o qual acusou a mensagem abaixo:
 
---------------------------
Erro!
---------------------------
Assinatura Inválida!
---------------------------
OK 
---------------------------
 
Tentei validar também pelo ACBrValidadorPafECF e acusou a mensagem abaixo:
 
---------------------------
Projeto ACBr - Verificador de Arquivos do Paf-ECF
---------------------------
Não foi possível verificar a assinatura do arquivo: 
 
Verifique se a chave informada é mesmo a chave correta antes de continuar. 
 
Verifique também se o arquivo foi assinado com a DLL de algum fabricante de impressoras fiscais, os fabricantes de impressoras fiscais criptografam o MD5 do arquivo antes de efetuar a criptografia para a assinatura EAD o que torna possível a verificação da assinatura somente utilizando o aplicativo eECFc, somente este aplicativo possui as rotinas de descriptografia para cada fabricante.
---------------------------
OK 
---------------------------
 
O arquivo é gerado e assinado.
 
Os outros arquivos como o "Vendas por Período" tem a assinatura validada.
 
A versão das DLLs OpenSSL é 0.9.8.25 e o Windows é o 7 Ultimate SP1 x86.
 
Eu fiz um teste, adicionando uma assinatura após o referido método utilizando o método "acbrEad.assinarArquivoComEAD(nomeArquivo, true);" e, então, a assinatura foi validada.
 
---------------------------
Sucesso!
---------------------------
Assinatura válida!
---------------------------
OK 
---------------------------
 
Alguém tem alguma dica do que pode estar acontecendo?

Desde já agradeço!

Share this post


Link to post
Share on other sites

Se você não está fazendo a assinatura usando o ACBrEAD, como está sendo feito a assinatura?


[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.

Share this post


Link to post
Share on other sites

Isso... E ele assina com base no quê?


[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.

Share this post


Link to post
Share on other sites

Não sei se entendi a pergunta. Ele assina com base na chave privada.
 
Segue:

 

    private static ACBrPAF getAcbrPaf() throws ACBrException {
        ACBrPAF acbrPaf = new ACBrPAF();
        acbrPaf.setNomeArquivo(Constantes.DIRETORIO_APLICACAO);
        acbrPaf.addOnPAFGetKeyRSA(new ACBrEventListener<PAFGetKeyRSAEventObject>() {
 
            @Override
            public void notification(PAFGetKeyRSAEventObject e) {
                e.setKey(Constantes.CHAVE_PRIVADA);
            }
        });
        return acbrPaf;
    }
 

----------------

 

    public static void geraRegistrosPAF() throws Exception {
        ACBrPAF acbrPaf = getAcbrPaf();
 
        geraRegistroU(acbrPaf);
 
 
        ...
 
        if (!acbrPaf.saveFileTXT_RegistrosECF(nomeArquivo)) {
            throw new ACBrException("Não foi possível criar o arquivo 'Registros PAF'.");
        }
    }
 
Se eu alterar o método geraRegistrosPAF() e fizer como abaixo, daí a assinatura é validada:
 
    public static void geraRegistrosPAF() throws Exception {
        ACBrPAF acbrPaf = getAcbrPaf();
 
        geraRegistroU(acbrPaf);
 
        ...
 
        if (!acbrPaf.saveFileTXT_RegistrosECF(nomeArquivo)) {
            throw new ACBrException("Não foi possível criar o arquivo 'Registros PAF'.");
        }
 
        ACBrEAD acbrEad = new ACBrEAD();
        acbrEad.setChavePrivada(Constantes.CHAVE_PRIVADA);
        acbrEad.assinarArquivoComEAD(nomeArquivo, true);
 
    }
 

Share this post


Link to post
Share on other sites

Não sei se entendi a pergunta. Ele assina com base na chave privada.

 

Segue:

 

    private static ACBrPAF getAcbrPaf() throws ACBrException {

        ACBrPAF acbrPaf = new ACBrPAF();

        acbrPaf.setNomeArquivo(Constantes.DIRETORIO_APLICACAO);

        acbrPaf.addOnPAFGetKeyRSA(new ACBrEventListener<PAFGetKeyRSAEventObject>() {

 

            @Override

            public void notification(PAFGetKeyRSAEventObject e) {

                e.setKey(Constantes.CHAVE_PRIVADA);

            }

        });

        return acbrPaf;

    }

 

----------------

 

    public static void geraRegistrosPAF() throws Exception {

        ACBrPAF acbrPaf = getAcbrPaf();

 

        geraRegistroU(acbrPaf);

 

 

        ...

 

        if (!acbrPaf.saveFileTXT_RegistrosECF(nomeArquivo)) {

            throw new ACBrException("Não foi possível criar o arquivo 'Registros PAF'.");

        }

    }

Realmente eu não devo ter sido bem claro. Mas nessa parte do código eu não estou vendo onde a assinatura do arquivo é feita. Você encontrou? Pega-se a chave, mas como é gerada a assinatura? Usando o quê?

Se eu alterar o método geraRegistrosPAF() e fizer como abaixo, daí a assinatura é validada:

 

    public static void geraRegistrosPAF() throws Exception {

        ACBrPAF acbrPaf = getAcbrPaf();

 

        geraRegistroU(acbrPaf);

 

        ...

 

        if (!acbrPaf.saveFileTXT_RegistrosECF(nomeArquivo)) {

            throw new ACBrException("Não foi possível criar o arquivo 'Registros PAF'.");

        }

 

        ACBrEAD acbrEad = new ACBrEAD();

        acbrEad.setChavePrivada(Constantes.CHAVE_PRIVADA);

        acbrEad.assinarArquivoComEAD(nomeArquivo, true);

 

    }

Isso acontece, pois aí está utilizando o ACBrEAD. E como você mesmo tinha dito no primeiro post, usando o ACBrEAD funciona.


[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.

Share this post


Link to post
Share on other sites

Pelo pouco que entendo, a assinatura EAD no arquivo é realizada pelo método saveFileTXT_RegistrosECF já que originalmente não implementei nada para assinar o arquivo. Eu gero os registros e invoco o método saveFileTXT_RegistrosECF e recebo como retorno um arquivo assinado com uma assinatura inválida. A definição da chave privada para realizar a assinatura é feita no listener "addOnPAFGetKeyRSA".

Share this post


Link to post
Share on other sites

O código do ACBrPAF chama o OnPAFGetKeyRSA apenas se você tiver definido a propriedade Assinar como True e não tiver passado nada para a propriedade EAD. Neste caso, o código faz exatamente isso que você adicionou acima. Cria um objeto ACBrEAD, pega a chave do onPAFGetKeyRSA e assina.


[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...