Certificado Digital no Linux (PFX ou PEM)  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
PadrE
JavaEvangelist
[Avatar]

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á !"
rafachies
Thread.start()
[Avatar]

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
[Email] [MSN]
PadrE
JavaEvangelist
[Avatar]

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á !"
rafachies
Thread.start()
[Avatar]

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
[Email] [MSN]
PadrE
JavaEvangelist
[Avatar]

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á !"
rafachies
Thread.start()
[Avatar]

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
[Email] [MSN]
PadrE
JavaEvangelist
[Avatar]

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á !"
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team