Ir para conteúdo
  • Cadastre-se

dev botao

Savefiletxt_Registrosecf - Assinatura Inválida


casagrande.powersoft
Ver Solução Respondido por EMBarbosa,
  • Este tópico foi criado há 3346 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

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!
Link para o comentário
Compartilhar em outros sites

  • Consultores

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

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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.
Link para o comentário
Compartilhar em outros sites

  • Consultores

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

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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.
Link para o comentário
Compartilhar em outros 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);
 
    }
 
Link para o comentário
Compartilhar em outros sites

  • Consultores

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
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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.
Link para o comentário
Compartilhar em outros 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".

Link para o comentário
Compartilhar em outros sites

  • Consultores
  • Solution

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
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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.
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3346 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...