| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2011 09:00:04
|
PadrE
JavaEvangelist
![[Avatar]](/images/avatar/e80ba3de4e2f156e3bdf5b3596b36ca4.jpg)
Membro desde: 03/04/2006 00:01:40
Mensagens: 410
Offline
|
Fala ae galera!
Vamos lá.. estou com uma aplicação web no Glassfish que utiliza certificado digital A1. Quando uso o Windows, não tenho problemas com o arquivo PFX, onde nem preciso instalar o certificado no no servidor. Tudo que preciso e ter um .jks do glassfish (no domain que utilizo) com os certificados públicos dos endereços que irei acessar.
O problema ocorre quando uso o Linux (Já testei no Fedora e Ubuntu), assim que executo o processo da aplicação que utiliza o certificado, ele me dá erro de que não pode encontrar o certificado digital, sendo que aponto para o arquivo PFX com permissão 777.
Li que no linux devemos usar o certificado de extensão PEM, usando o OpenSSL para converter PFX em PEM. Fiz a conversão e tentei apontar para o arquivo PEM no lugar do PFX e nada também. Cheguei em um ponto de instalar o certificado no servidor, assim como no Windows, seria esse o caminho? Alguém sabe como instalar o certificado PEM no Linux?
Vlw
|
PadrecO
"O conhecimento o libertará !" |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2011 09:16:39
|
rafachies
Thread.start()
![[Avatar]](/images/avatar/321490c58d4ea3d4c09d27b3cb7adefa.jpg)
Membro desde: 19/04/2008 17:24:15
Mensagens: 47
Localização: São Paulo
Offline
|
PadrE,
No linux deveria funcionar da mesma forma. Basta você possuir o JKS que tenha os certifcados (PEM`s) dos parceiros ao qual você irá se conectar.
Ajudaria se você postasse o erro que ocorreu (stacktrace resolveria). Já vi muitos erros parecidos com o seu onde o problema era o path do arquivo JKS que você está utilizando no código, visto que paths no linux são diferentes do windows ( uso de "\", "file:///", entre outros).
[]'s
|
Rafael Chies
Bacharel em ciências da computação - USP
Freeddom Tecnologia
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2011 11:08:44
|
PadrE
JavaEvangelist
![[Avatar]](/images/avatar/e80ba3de4e2f156e3bdf5b3596b36ca4.jpg)
Membro desde: 03/04/2006 00:01:40
Mensagens: 410
Offline
|
opa... eae rafa
O erro que fica se repetindo é:
O JKS que modifiquei para ter as chaves é do prórpio glassfish, que fica na pasta config do domain.
O detalhe que me veio a mente é que esse cacerts foi feito no windows, será que isso pode afetar o conteúdo do cacerts?
|
PadrecO
"O conhecimento o libertará !" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2011 12:40:12
|
rafachies
Thread.start()
![[Avatar]](/images/avatar/321490c58d4ea3d4c09d27b3cb7adefa.jpg)
Membro desde: 19/04/2008 17:24:15
Mensagens: 47
Localização: São Paulo
Offline
|
É ... isso "implementation (algorithm: Default" soa estranho. O que você possui como base para gerar o certificado? Digo, você está conectando com um outro servidor. Qual arquivo este servidor lhe forneceu para que você importasse em seu JKS ? chave publica ? certificado ?
-- abordagem alternativa
Caso voce mesmo tenha gerado o proprio certificado e chaves tanto para o servidor, como para o cliente, tente gerar a chaves e certificados do zero no linux utilizando o openssl e keytool. Caso você queira realizar esta abordagem, se preferir, te passo os comandos passo a passo.
[]'s
|
Rafael Chies
Bacharel em ciências da computação - USP
Freeddom Tecnologia
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2011 08:29:49
|
PadrE
JavaEvangelist
![[Avatar]](/images/avatar/e80ba3de4e2f156e3bdf5b3596b36ca4.jpg)
Membro desde: 03/04/2006 00:01:40
Mensagens: 410
Offline
|
Está tudo no mesmo servidor, aplicação, certificados etc.
O JKS foi me passado pelo pessoal responsável pela aplicação e pela aplicação faço uma referência a um certificado PFX.
O JKS que foi modificado foi o do Glassfish que fica dentro da pasta config do domain.
No aruqivo JKS estariam as chaves publicas para acesso aos webservice que a aplicação precisa.
Vou pesquisar os comandos do keytool, mas se você tiver fácil os comandos, agradeço!
Vlw
|
PadrecO
"O conhecimento o libertará !" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2011 08:48:55
|
rafachies
Thread.start()
![[Avatar]](/images/avatar/321490c58d4ea3d4c09d27b3cb7adefa.jpg)
Membro desde: 19/04/2008 17:24:15
Mensagens: 47
Localização: São Paulo
Offline
|
Abaixo seguem os passos quando se deseja construir do zero a parte do servidor (chave privada) e do cliente (parte publica da coisa). No seu caso, se o servidor (maquina na qual vc ira se conectar) ja possuir a privada, voce soh executara a partir do passo 4, a partir do certificado que o parceiro (dono da maquina que vc ira se conectar) lhe forneceu.
1. Cria a chave privada com X bits
openssl genrsa -des3 -out {nome_chave_privada.pem} 2048
2.a Cria um certificado auto assinado
openssl req -new -x509 -key {chave privada criada} -out {nome_certificado_autoassinado.pem} -days 1095
3. importa uma chave privada + certificado assinado em um JKS keystore (para o servidor Java utilizar)
openssl pkcs12 -export -inkey {chave privada} -in {chave publica/certificado auto-assinado} -out {saida .p12} -name {identificacao do certificado entre aspas duplas}
java PKCS12Import {input.p12} {output.jks}
4. cria um JKS truststore a partir de um certificado assinado OU A PARTIR DO CERTIFICADO QUE O PARCEIRO LHE FORNECEU
keytool -storepass changeit -keystore {nome_do_truststore_a_ser_gerado.jks} -importcert -alias alias_do_ceritificao_dentro_do_jks -file {certificado_autoassinado_ou_fornecido.pem} -trustcacerts
Depois de ter o trustore.jks é só adicioná-lo no glassfish e é para funcionar.
Qualquer duvida estamos ae.
[]`s
|
Rafael Chies
Bacharel em ciências da computação - USP
Freeddom Tecnologia
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/01/2011 16:14:55
|
PadrE
JavaEvangelist
![[Avatar]](/images/avatar/e80ba3de4e2f156e3bdf5b3596b36ca4.jpg)
Membro desde: 03/04/2006 00:01:40
Mensagens: 410
Offline
|
Vamos lá.. o que fiz até agora..
Tenho um certificado p7b que o servidor onde irei acessar me forneceu. Então converti esse p7b em um pem com o comando abaixo:
openssl pkcs7 -inform DER -outform PEM -in SEFAZSP_homologacao.p7b -out SEFAZSP_homologacao.pem -print_certs
O próximo passo foi importá-lo para dentro do cacerts.jks:
keytool -storepass changeit -keystore meucacerts.jks -importcert -file SEFAZSP_homologacao.pem -trustcacerts
E esse último gerou o erro:
error: java.lang.Exception: Input not an X.509 certificate
Executei esses comando no Win. No linux deu erro logo no primeiro:
openssl pkcs7 -inform DER -outform PEM -in SEFAZSP_homologacao.p7b -out SEFAZSP_homologacao.pem -print_certs
unable to load PKCS7 object
3508:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1316:
3508:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:380:Type=PKCS7
Tentei executar como root tb...
|
PadrecO
"O conhecimento o libertará !" |
|
|
 |
|
|