Boa tarde. Estamos desenvolvendo uma aplicação para o e-Financeiro (http://sped.rfb.gov.br/pagina/show/1499). Uma destas etapas consiste em pegar o certificado do cartão e-cnpj e assinar um arquivo XML.
Estou utilizando o código abaixo:
for (int pos = 0; pos < qtde; pos++) {
Element el = (Element) elements.item(pos);
String id = el.getAttribute("id");
Reference ref = signatureFactory.newReference("#" + id,
signatureFactory.newDigestMethod(DigestMethod.SHA1, null), transformList,
null, null);
SignedInfo si = signatureFactory.newSignedInfo(signatureFactory.newCanonicalizationMethod(
CanonicalizationMethod.INCLUSIVE,
(C14NMethodParameterSpec) null),
signatureFactory.newSignatureMethod(SignatureMethod.RSA_SHA1, null),
Collections.singletonList(ref));
XMLSignature signature = signatureFactory.newXMLSignature(si, keyInfo);
DOMSignContext dsc = new DOMSignContext(privateKey, el.getParentNode());
signature.sign(dsc);
}
Quando utilizo o método signature.sign(dsc) , aparece um janela para o preenchimento da senha (é implementação do próprio e-CNPJ. O arquivo é assinado, mas ao submeter a Receita o site indica que a assinatura está inválida. Como vi que algumas pessoas do fórum também estão desenvolvendo aplicações para o e-Financeira, eu estou pedindo alguma ajuda.
Muito obrigado.
Boa tarde.
Eu continuo recebendo o erro MS0017 (Erro na assinatura) da receita. Comparando o meu hash com o exemplo da receita, vi uma diferença: o da receita tem uma linha e o meu hash é uma coluna de caracteres:
BgNVBAoTCklDUC1CcmFzaWwxNjA0BgNVBAsTLVNlY3JldGFyaWEgZGEgUmVjZWl0YSBGZWRlcmFs … (mais N caracteres)
BgNVBAoTCklDUC1CcmFzaWwxNjA0BgNVBAsTLVNlY3JldGFyaWEgZGEgUmVjZWl0YSBGZWRlcmFs
IGRvIEJyYXNpbCAtIFJGQjEZMBcGA1UEAxMQQUMgU0VSQVNBIFJGQiB2MjAeFw0xNDExMjcxMTM1
MDBaFw0xNzExMjYxMTM1MDBaMIHyMQswCQYDVQQGEwJCUjELMAkGA1UECBMCUkoxFzAVBgNVBAcT
DlJJTyBERSBKQU5FSVJPMRMwEQYDVQQKEwpJQ1AtQnJhc2lsMTYwNAYDVQQLEy1TZWNyZXRhcmlh
… (mais N caracteres)
Olá,
Estou fazendo uma poc para o e-Financeira em .NET e tive o mesmo problema no retorno da receita. O meu problema estava relacionado ao ambiente de testes da Receita, quando enviamos um teste para produção o erro mudou, não foi mais a assinatura inválida.
Outro ponto que eu não vi no seu código é a conversão da assinatura para base64.
abs.
Obrigado, Wpascucci.
Estou validando meus arquivos pelo link de Upload Manual do SPED, trocando o atributo tpAmb para 2. Foi esse o teste que você fez ?
Com relação a Base64 outros desenvolvedores .NET me passaram essa dica, mas pelo que eu vi no java não precisaria fazer isso.
Boa tarde.
Desde ontem o site da receita parou retornar os meus arquivos com o erro MS0017 (Assinatura inválida) e passou a retornar o erro MS1030 (Erro na estrutura da solicitação.The value of the ‘Algorithm’ attribute does not equal its fixed value). E eu não fiz alteração nenhuma. Tanto que eu peguei arquivos antigos e o tratamento do erro agora é diferente.
Percebi que os arquivos de retorno agora vem com o Algoritmo rsa-sha256 e não o rsa-sha1.
Vocês tiveram um problema parecido ?
No intuito de conferir segurança adicional da informação, o algoritmo de assinatura dos eventos da e-Financeira foi alterado para o SHA-2, em substituição ao SHA-1. A partir de 11/04/2016, só serão recebidos pelo sistema arquivos assinados utilizando o novo algoritmo. As orientações acerca do novo padrão estão publicadas na versão 1.0.2 do Manual de Preenchimento.
Atendendo a pedidos de alguns contribuintes, também será disponibilizado, na seção de Download (Projetos>>e-Financeira>>Download), um arquivo .zip contendo um exemplo de código em .NET para assinatura dos eventos, já contemplando a alteração do algoritmo para SHA-2. Trata-se de um insumo para desenvolvedores de TI, quando da elaboração de rotinas em seus sistemas próprios para assinatura dos eventos da e-Financeira. Ressaltamos que não será fornecido suporte nem realizada atualização ao código em questão, tendo em vista que se trata apenas de um exemplo para demonstrar a forma como devem ser assinados os arquivos enviados.
Obrigado, Wpascucci1. Provavelmente eles estavam mudando o ambiente de produção enquanto eu estava realizando os meus testes. E prova que não era só eu que estava com problemas na assinatura.
Você conseguiu enviar os arquivos pro ambiente de produção ?
Então cara eu mandei manualmente e o problema de assinatura inválida não ocorreu, deu um erro na estrutura do id, mas ai quando tentei mandar novamente eles mudaram o algoritmo e tomei o novo erro, agora estou estruturando para testar novamente.