[Nfe] Bug no System.setProperty("javax.net.ssl.keyStore","...");

17 respostas
F

Pessoal,

Estou desenvolvendo uma solução para nfe, com certificado A1.

Desenvolvi a solução de acordo com o POST do rafaelbtz :

http://www.guj.com.br/posts/list/52035.java

Até ai tudo bem … funcionou beleza … mas quando eu mudo em tempo de execução o :

A Vm não muda este parametro e fica com o PFX da empresa antiga (a solução é para multiplas empresas).

E como a minha solução é um outro WS, estou com medo tambem de concorrencia … dois processos alterando o System.property …

Alguem mais notou este bug ? Existe outra maneira de passar a chave e o chaveiro para as minhas classes sem ser esta ?

Obrigado

Faruk

17 Respostas

F

alguem ?

alves.Felipe

puts… pelo que eu ja testei aqui… vc precisa reiniciar a aplicação para setar outro certificado…
mas não fui mais atras tb…
mas sera que não tem como criar um keystore com todos os certificados que vc precisa… no caso os pfx…?
foi só uma dica… nunca tentei fazer…

F

Sim, qdo eu restarto o tomcat funciona …

:cry:

rafaelbtz

Não sei disso não mas seu problema eu acho que é sincronização, duas Threads alterando ao mesmo tempo não é ???

O meu é desktop não fica sob o tomcat aqui eu alterei o System.property e não tive problemas (foi só um teste, mas parece q funcionou)…

F

Pior que não … eu faço uma requisição por vez …

Eu li na internet que o JSSE altera apenas uma vez o system.property na vm … no seu caso da certo pq cada vez que você executa o seu programa vc executa uma vm seta a propriedade e o processo morre … e assim por diante … já no tomcat é a mesma vm …

fabiofalci

Quem pega esse valor do System.getProperty?
Isso não pode ser customizado para pegar de um lugar, digamos, menos público em um AS?

F

Aew pessoal , voltei para este projeto e estou com o mesmo bug … alguem tem alguma luz?

F

Bom pessoal, consegui resolver este bug … aparentemente quando setamos um valor no System.property e setamos novamente este valor, a segunda vez não funciona até que a vm morra.

No axis é a mesma coisa …

Para resolver isso um pessoal fez um extensão do axis :

http://code.google.com/p/axis-ssl/

Eu estou utilizando ela sem problemas …

É isso.

Faruk

A

farukzahra, seguinte :

verifiquei o link que vc passou, baixei a lib e adicionei no meu projeto, depois peguei o código de exemplo e adicionei na minha classe. Porem ocorre um erro na linha :

axisConfig.initialize();

não acha esse método.

Você pode me passar mais algumas informações de como usar essa biblioteca.

até mais …

F

Opa,

Crie um objeto :

SSLClientAxisEngineConfig axisConfig = new SSLClientAxisEngineConfig();
Faça os Set´s :

axisConfig.setProtocol("TLS"); axisConfig.setAlgorithm("SunX509"); axisConfig.setKeyStore(diretorio+parametros[0]); axisConfig.setKeyStoreType("PKCS12"); axisConfig.setKeyStorePassword(parametros[1]); axisConfig.setTrustStore(keystoreCaminho); axisConfig.setTrustStoreType("JKS"); axisConfig.setTrustStorePassword(keystorePass);

E passe o objeto para o Proxy criado automaticamente pelo axis :

public NfeConsultaSoapProxy(String endpoint, SSLClientAxisEngineConfig axisConfig) { _endpoint = endpoint; _initNfeConsultaSoapProxy(axisConfig); }

A

farukzahra,

agora deu certo criando dessa forma que você passou, porem só faz a comunicação com a primeira consulta.
quando tento fazer uma nova comunicação, sem fechar o sistema, ocorre o seguinte erro :

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found

Estou fazendo o seguinte teste, mando fazer a comunicação com web service do Paraná, na primeira comunicação tudo ok.
Depois tento fazer a comunicação com web service do RS sem fechar o sistema e da o erro citado acima.

F

Você redirecionou seu objeto axis para o ws do RS ?

A

sim, fiz a todas as configurações no objeto.
Porque cada consulta que faço eu crio o objeto axisConfig, faço as atribuições e depois eu faço ele receber null.

rafaelbtz

Vocês estão falando de NFe versão 1 certo?

Eu uso isso ai na versão 1 também, mas pra versão 2 da NFe eu passei a usar o Axis2 mas ai isso não funcionou mais.

Alguem aqui está implementando isso com a versão 2 da NFe?

Obrigado.

A

estive observando, por exemplo :
quando eu faço a primeira consulta de status para web service do Paraná, demora alguns segundos para retornar a resposta.
Em seguida altero para web service de Santa Catarina sem fechar o sistema, a resposta com erro é quase que imediata.
Estou atribuindo null para todos os objetos que estou criando. Em cada consulta é criado novos objetos.
Será que fica alguma coisa em memória ?
Alguem tem mais alguma dica de como resolver isso ?

até mais …

G

pessoal estou tentando usar o axisConfig, mas estou com dúvida nessa classe:

1. public NfeConsultaSoapProxy(String endpoint, SSLClientAxisEngineConfig axisConfig) { 2. _endpoint = endpoint; 3. _initNfeConsultaSoapProxy(axisConfig); 4. }

o que exatamente sao essas variáveis _endpoint e _initNfeConsultaSoapProxy ??? estou desenvolvendo a parte de Envio, entao isso deveria mudar, mas não sei o que são essas variáveis.
alguem sabe dizer?

CoringadoBatman

javax.servlet.ServletException: java.lang.RuntimeException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)(-10001)
at SdtServiceGinfesImplService.consultarsituacaoloterpsv3(SdtServiceGinfesImplService.java:1646)

Como posso resolver isso sem utilizar parametros dentro da classe java?

Criado 12 de abril de 2010
Ultima resposta 19 de jan. de 2012
Respostas 17
Participantes 7