Assinatura com chave PKCS7 com algoritmos RSA do Bradesco

1,552 views
Skip to first unread message

Ricardo Oliveira

unread,
Sep 17, 2017, 5:33:04 PM9/17/17
to rails-br

Alguém já vez a assinatura do Bradesco para boletos ??? 

ou tem idéia de como implementá-la ???

Atte.

Ricardo Oliveira

Ricardo Oliveira

unread,
Sep 19, 2017, 10:54:34 AM9/19/17
to rails-br

    data = {"nuCPFCNPJ": "123456789",
          "filialCPFCNPJ": "0001",
          "ctrlCPFCNPJ": "39",
          "cdTipoAcesso": "2",
          "clubBanco": "0",
          "cdTipoContrato": "0",
          "nuSequenciaContrato": "0",
          "idProduto": "09",
          "nuNegociacao": "123400000001234567",
          "cdBanco": "237",
          "eNuSequenciaContrato": "0",
          "tpRegistro": "1",
          "cdProduto": "0",
          "nuTitulo": "0",
          "nuCliente": "123456",
          "dtEmissaoTitulo": "25.05.2017",
          "dtVencimentoTitulo": "20.06.2017",
          "tpVencimento": "0",
          "vlNominalTitulo": "100",
          "cdEspecieTitulo": "04",
          "tpProtestoAutomaticoNegativacao": "0",
          "prazoProtestoAutomaticoNegativacao": "0",
          "controleParticipante": "",
          "cdPagamentoParcial": "",
          "qtdePagamentoParcial": "0",
          "percentualJuros": "0",
          "vlJuros": "0",
          "qtdeDiasJuros": "0",
          "percentualMulta": "0",
          "vlMulta": "0",
          "qtdeDiasMulta": "0",
          "percentualDesconto1": "0",
          "vlDesconto1": "0",
          "dataLimiteDesconto1": "",
          "percentualDesconto2": "0",
          "vlDesconto2": "0",
          "dataLimiteDesconto2": "",
          "percentualDesconto3": "0",
          "vlDesconto3": "0",
          "dataLimiteDesconto3": "",
          "prazoBonificacao": "0",
          "percentualBonificacao": "0",
          "vlBonificacao": "0",
          "dtLimiteBonificacao": "",
          "vlAbatimento": "0",
          "vlIOF": "0",
          "nomePagador": "Cliente Teste",
          "logradouroPagador": "rua Teste",
          "nuLogradouroPagador": "90",
          "complementoLogradouroPagador": "",
          "cepPagador": "12345",
          "complementoCepPagador": "500",
          "bairroPagador": "bairro Teste",
          "municipioPagador": "Teste",
          "ufPagador": "SP",
          "cdIndCpfcnpjPagador": "1",
          "nuCpfcnpjPagador": "12345648901234",
          "endEletronicoPagador": "",
          "nomeSacadorAvalista": "",
          "logradouroSacadorAvalista": "",
          "nuLogradouroSacadorAvalista": "",
          "complementoLogradouroSacadorAvalista": "",
          "cepSacadorAvalista": "0",
          "complementoCepSacadorAvalista": "0",
          "bairroSacadorAvalista": "",
          "municipioSacadorAvalista": "",
          "ufSacadorAvalista": "",
          "cdIndCpfcnpjSacadorAvalista": "0",
          "nuCpfcnpjSacadorAvalista": "0",
          "endEletronicoSacadorAvalista": ""
    } # Dados estraidos do Manual


    private_key = File.read('private_key.pem')
    certificate = File.read('publicCert.pem')

    key = OpenSSL::PKey::RSA.new(private_key)



    crt = OpenSSL::X509::Certificate.new(certificate)

    hash = JSON.generate(data)
    
    # assina com o certificado e padrão PKCS7
    puts "Hash do JSON"

    pkcs7 = OpenSSL::PKCS7.sign crt, key, hash, [], OpenSSL::PKCS7::BINARY || OpenSSL::PKCS7::TEXT


    .. O problema está neste trecho acima, alguém já fez este tipo de assinatura no ruby ???

Quando eu mando o JSON assinado para o banco dá este erro:

{"cdErro":"810", "msgErro":"Erro Certificado / Formatacao dos campos da mensagem invalida [0x00d30003]"}</return></ns2:registrarTituloResponse>

George Moura

unread,
Sep 19, 2017, 1:41:31 PM9/19/17
to rails-br
Os valores dos campos que são números precisam ser enviados como string ou inteiro?

George Moura
(71) 98788-6089
Desenvolvedor Web e Mobile

--
--
Você recebeu essa mensagem porquê está inscrito no Google
Groups "rails-br".
Para enviar uma mensagem para o grupo, mande um email para rail...@googlegroups.com
Para se descadastrar, mande um e-mail para
rails-br+unsubscribe@googlegroups.com
Visite o grupo em http://groups.google.com/group/rails-br?hl=pt-BR
Leia nossa política de uso: https://goo.gl/BHB0wS
---
Você recebeu essa mensagem porque está inscrito no grupo "rails-br" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para rails-br+unsubscribe@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Ricardo Oliveira

unread,
Sep 19, 2017, 1:51:53 PM9/19/17
to rails-br

Strings, 

Este json está correto já está sendo enviado via PHP.  

Visite o grupo em http://groups.google.com/group/rails-br?hl=pt-BR
Leia nossa política de uso: https://goo.gl/BHB0wS
---
Você recebeu essa mensagem porque está inscrito no grupo "rails-br" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para rails-br+u...@googlegroups.com.

Ricardo Oliveira

unread,
Sep 19, 2017, 11:47:41 PM9/19/17
to rails-br


Vejam abaixo a rotina de geração da assinatura do JSON: PKCS7 com certificado padrão X509. ( uma chave pública e uma privada .cer )








Gera esta assinatura:




Estou enviando assim :





E o retorno do BRADESCO é este:


{"cdErro":"810", "msgErro":"Erro Certificado / Formatacao dos campos da mensagem invalida [0x00d30003]"}</return></ns2:registrarTituloResponse>



Alguém já usou este recurso ou já viu algum problema com o PKCS7 >?????


Abraço a todos.



Eles alegam que não tenho assinado PKCS7 corretamente.




Em terça-feira, 19 de setembro de 2017 13:51:53 UTC-4, Ricardo Oliveira escreveu:

Strings, 

Este JSON está correto já está sendo enviado via PHP.  

Ricardo Oliveira

unread,
Sep 20, 2017, 2:47:17 PM9/20/17
to rails-br

Obrigado aos que ajudaram , demorou mais saiu.


Agora um resumo para análise final:

  1. Temos que assinar e enviar ao Bradesco a chave pública no padrão cert ??? senão eles não validam a assinatura, antes nós estávamos mandando no padrão PEM;

  2. Tenho que tirar no ruby os Head e Tail da assinatura BEGIN/-----END PKCS7-----;

  3. Criptografa com base64 e manda no POST somente no body este conteúdo;

Feito isto mesmo dando erro 810 , a turma da 7COMM do suporte do bradesco me confirmaram que receberam lá , agora é a fase dos dados reais no json, agora está mais fácil.


Quem quiser maiores informações sobre esta rotina, aqui tem bastante coisa útil:


https://github.com/BoletoNet/boletonet/issues/306#issuecomment-327580901



Abraço a todos e fica ai nossa pequena ajuda nestes procedimentos.



Ricardo Oliveira



Em domingo, 17 de setembro de 2017 17:33:04 UTC-4, Ricardo Oliveira escreveu:

George Moura

unread,
Sep 20, 2017, 6:29:12 PM9/20/17
to rails-br
Hehehhehe Que bom que conseguiu fazer, desculpa não poder ter ajudado mais :)

George Moura
(71) 98788-6089
Desenvolvedor Web e Mobile

--
--
Você recebeu essa mensagem porquê está inscrito no Google
Groups "rails-br".
Para enviar uma mensagem para o grupo, mande um email para rail...@googlegroups.com
Para se descadastrar, mande um e-mail para

Visite o grupo em http://groups.google.com/group/rails-br?hl=pt-BR
Leia nossa política de uso: https://goo.gl/BHB0wS
---
Você recebeu essa mensagem porque está inscrito no grupo "rails-br" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para rails-br+unsubscribe@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages