Bom dia galera.
Estou desenvolvendo uma aplicação para consumir o webservice do tribunal de justiça.
Para realizar o login eu preciso consumir dois serviços (SolicitaLogon e ConfirmaLogon).
No serviço (SolicitaLogon) eu envio minha identificação e assino o xml, o webservice me retorna um xml com a confirmação da identificação e uma tag contendo uma String.
Eu preciso assinar essa String utilizando algoritmos RSA e SHA1 e converter para Base64.
Texto do manual:
Assinatura do desafio retornado na tag e envio do desafio assinado para
confirmação do logon. Para isso será utilizado o serviço ?ConfirmaLogon?.
A assinatura digital do desafio deverá ser realizada utilizando-se os algoritmos RSA e SHA1.
O formato de saída da assinatura deverá ser base 64.
Para esse procedimento estou utilizando o seguinte código:
public String assinarDesafio(String desafio) throws Exception{
loadCertificates(); //Carrega meu certificado
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.reset();
byte[] input = digest.digest(desafio.getBytes("UTF-8"));
byte[] sha1hash = new byte[1024];
Signature dsa = Signature.getInstance("SHA1withRSA");
dsa.initSign(privateKey);
dsa.update(input);
sha1hash = dsa.sign();
String desafioAssinado = Base64.encodeBase64String(sha1hash);
return desafioAssinado;
}
Porém o webservice me retorna o xml com erro, dizendo o que o desafio é inválido.
Já tentei somente assinar, sem passar no (digest), mas retornou o mesmo erro.
Não sei o que estou fazendo de errado.
Alguém já consumiu esse serviço?
Alguma ideia do que eu esteja fazendo de errado.
Manual completo:
http://www.mpce.mp.br/servicos/licitacoes/arquivos/MAR-SAJ-2011%200001-PADRAO%20DE%20INTEGRACAO_TJCE_InstituicoesConveniadas.pdf
Valeu.