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?
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).
É … 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.
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!
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.
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
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}
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.
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