Novo certificado da erro (RESOLVIDO)

Olá, gostaria de saber se alguém pode me ajudar com este problema. Tenho um sistema que emite NFe que esta funcionando em 2 clientes. Hoje recebi um de um destes clientes o novo arquivo pfx do certificado dele pois o outro expirou.

Até ai não deveria ter nenhum problema, troquei o cerificado e a senha e para minha surpresa deu erro de 403 forbidden.

Ai resolvi fazer um teste básico usando o navegador (Firefox) pois achei que o certificado poderia estar corrompido o arquivo mais para minha nova surpresa no navegador funcionou sem problemas.

Comecei a desconfiar de meu próprio programa então resolvi alterar o teste que fiz para que use o certificado digital do meu outro cliente e funcionou.

Portanto cheguei num ponto que fiquei meio sem idéias pois no final tudo indicaria erro no certificado mais no navegador esta ok, a unica coisa que achei estranho é que nos outros certificados que tenho, incluindo o que expirou deste cliente, ele lista Certificate chain length: 4 que seria o cerificado em si e mais a hierarquia certificadora, mais neste novo que chegou aparece como Certificate chain length: 1 e portanto somente o certificado em si sem a hierarquia, mais ela esta dentro do meu trusted CA então acredito que não seria este o problema (ou será que é)??

Alguém tem uma ideia do que pode ser?

Só para constar o certificado é um A1 emitido dia 31/10/2011 pelos Correios.

Só para ter uma ideia fiz uma simulação bem básica para testar o erro no certificado.


        System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");

        System.clearProperty("javax.net.ssl.keyStore");
        System.clearProperty("javax.net.ssl.keyStorePassword");
        System.clearProperty("javax.net.ssl.trustStore");

        System.setProperty("javax.net.ssl.keyStore", "certificado_meu_cliente.pfx");
        System.setProperty("javax.net.ssl.keyStorePassword", "senha");

        System.setProperty("javax.net.ssl.trustStoreType", "JKS");
        System.setProperty("javax.net.ssl.trustStore", "trust_ca_nfe.jks");
        System.setProperty("javax.net.ssl.trustStorePassword", "senha");


        URL url = new URL("https://nfe.fazenda.sp.gov.br/nfeweb/services/nfestatusservico2.asmx?WSDL");
        Object result = url.getContent();
        System.out.println(result);

Vai aparecer 2 vezes meu tópico pois na primeira tentativa de salvar deu um erro de IndexOutOfBandException então achei que não tinha salvo e salvei novamente.

Já tive problema com o Java no Linux, com o Linux em pt-br, o java “brigava” com o a classe de ler certificados. Tive que mudar o linux para inglês (en_US) para funcionar.

Não parece ser este o caso mais fiz mais alguns testes que me preocuparam. Fiz um acesso usando este mesmo certificado via wget e funcionou, então realmente parece ser um problema com o Java acessando este certificado. O mais estranho é que com outros certificados funcionou, tentei mudar ele de pkcs12 para jks e mesmo assim deu erro. Vou tentar uma atualização da minha JVM mais mesmo que funcionar será um problema pois não tenho como fazer a mesma coisa no servidor de produção pois ele é uma hospedagem normal em provedor.

Bom galera o problema foi resolvido. Quase infartei desta vez, mais seguindo o padrão se você fizer a pergunta correta o google responde e no caso a resposta veio aqui do forum mesmo, acheu um post antigo que dava a solução.

A dica do evandrosantos éra “Meu certificado estava com o bit de Autenticação do Servidor ligado, sendo assim, utilizei o IE para desativar esse bit e exportei o certificado…”

na prática terei que pesquisar um pouco pois solucionei o problema mais sabe como é não sei muito bem qual o conceito disto e porque o java não suporte o tal bit (flag?) seilá.

O importante é que funcionou.

Abraços.

Como fizeram isso, de mudar a flag???