| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/07/2006 10:07:58
|
williammafra
Thread.start()
Membro desde: 23/04/2004 13:21:51
Mensagens: 28
Offline
|
Pessoal, estou com um problema, tenho que fazer minha aplicação se conectar a um determinado site que está rodando com ssl, mas como o certificado não é reconhecido, o sistema lança uma excessão. Sei que posso salvar em arquivo o certificado via internet explorer, e que posso importar pela ferramenta keytool, já fiz alguns testes e ainda continuo obtendo o erro, será que alguém poderia me ajudar?
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/07/2006 10:14:11
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
a) Qual é a exceção?
b) Que versão do Java você está usando? Para algumas versões (como 1.4.2 mas anterior à 1.4.2_08) há problemas ao importar certificados gerados pelo Microsoft Certificate Services.
c) Exceção é com ç porque em inglês exception é com pt - embora esta regra não seja muito rigorosa (por exemplo, analisar em português é com S e em inglês americano é com Z) é fácil de lembrar.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/07/2006 10:32:43
|
williammafra
Thread.start()
Membro desde: 23/04/2004 13:21:51
Mensagens: 28
Offline
|
a) Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.
b)1.5
c)Obrigado pela correção, rs...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/07/2006 10:40:04
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Você precisa incluir no seu arquivo de keystore todos os certificados que fazem parte do caminho de certificação. (Veja no seu browser).
Por exemplo, digamos que você tenha de se conectar ao site https://mustang.dev.java.net. Você terá de incluir o certificado-raiz (GTE Cybertrust Global Root), que provavelmente já está no seu keystore, e o "Comodo Class 3 Security Services CA".
"Certificate Hierarchy" (Mozilla) ou "Certification Path" (IE)
GTE CyberTrust Global Root
Comodo Class 3 Security Services CA
*.dev.java.net
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/07/2006 10:43:45
|
williammafra
Thread.start()
Membro desde: 23/04/2004 13:21:51
Mensagens: 28
Offline
|
.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/07/2006 11:42:01
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Você está tentando conectar-se pelo IP. No caso do SSL é muito importante usar o NOME correto, para que a conexão seja efetuada corretamente. Talvez você tenha de modificar /etc/hosts (no Windows C:\windows\system32\drivers\etc\hosts) se você não puder pôr o tal endereço no DNS ou não puder usar o DNS no seu cliente SSL.
Por exemplo:
https://sitenet05.serasa.com.br/...blablabla?wsdl deve fechar a conexão .
em vez de
https://xxx.xxx.xxx.xxx/...blablabla?wsdl não deve fechar.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/07/2006 13:55:19
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Experimente rodar este programa (salve o certificado "Serasa AC Global" em um arquivo "serasaacglobal.cer", em formato DER (binário)).
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 09:01:14
|
luis.txt
JavaChild
![[Avatar]](/images/avatar/a0ab09eb2842e474a3a5aed12e533a2a.jpg)
Membro desde: 30/04/2008 09:26:07
Mensagens: 127
Localização: Minas
Offline
|
Thingol,
Sem querer ser chato postando nesse tópico antigo, mas queria te fazer uma pergunta. Estou com o mesmo problema que o williammafra. Eu criei um certificado pelo OpenSSL e a sua extenção é .p12. Como faço para usar ele nessa sua classe. Tenho de converter para esse formato DER? Se for, como faço isso. Pelo browser ele tá funcionando legal, mas preciso fazer minha aplicação reconhecer ele fora do browser.
Agradeço se puder me ajudar!
This message was edited 1 time. Last update was at 02/09/2008 09:02:02
|
http://clway.wordpress.com
Iron Maiden's gonna get you,
No matter how far. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 09:16:41
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Usando o OpenSSL é possível extrair o arquivo X.509 a partir de um arquivo PKCS#12 (que é o que você tem em mãos). O código que mostrei requer um arquivo X.509 em formato binário.
Não sei o comando assim de cor, mas deve ser algo como openssl pkcs12 -in seuarquivo.p12 -clcerts -out seuarquivo.cer ou coisa parecida; por favor, consulte os parâmetros usando openssl pkcs12 -?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 13:30:02
|
luis.txt
JavaChild
![[Avatar]](/images/avatar/a0ab09eb2842e474a3a5aed12e533a2a.jpg)
Membro desde: 30/04/2008 09:26:07
Mensagens: 127
Localização: Minas
Offline
|
Obrigado thingol,
Usei o certificado com a extensão .crt gerado pelo OpenSSL e com sua classe funcionou. Mas tenho uma pergunta para você. Em uma aplicação onde muitas pessoas vão utilizar ao mesmo tempo, usar socket (como na sua classe) seria meio complicado não é mesmo? Ou utilizar socket não tem tanta diferença em relação a uma conexão http comum a um servlet?
Obrigado pela atenção!
|
http://clway.wordpress.com
Iron Maiden's gonna get you,
No matter how far. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2008 13:37:44
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
O exemplo (usando sockets) é só um exemplo. O correto é usar o suporte a https (http + ssl) que o Java tem. Se for usar esse suporte, o código é um pouco diferente.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/06/2009 12:28:15
|
mizael86
Java Ninja
Membro desde: 18/01/2008 10:24:27
Mensagens: 262
Offline
|
tingol, sendo mais chato ainda que o amigo la em cima, em reviver esse post bemmm antigo (rs), eu tambem estou com um problema similar.
O Codigo acima para recuperar o certificado e salvar em um arquivo, eu achei em um outro exemplo por ai. Eu estou usando o HttpClient da apache para realizar conexoes http. Incialmente eu estava recebendo a mesma excessao que o amigo acima esta recebendo, ai consegui resolver recuperando o certificado com a aplicação acima, salvando em um arquivo e colocando ele na pasta java-home/lib/security. Fazendo isso funciona perfeitamente. A questao é que aonde eu estou tentando fazer a conexao, parece que ele altera o certificado toda semana, ou seja, eu teria que gerar um arquivo diferente por semana e colocar la, ocasionando em restartar minha jvm para reconhecer o novo certificado, etc. A minha duvida é como eu poderia fazer para recuperar o certificado (X509Certificate) de forma dinamica, adicionar ele como um certificado reconhecido sem precisar restartar a minha aplicação? Ou seja, fazer tudo de forma dinamica. Vlw amigo
|
|
|
 |
|
|