Migração de certificado digital

4 respostas
S

iaí, galera…

Onde eu trabalho, tinha um servidor linux com certificado digital gerado em Apache/Openssl, utilizando certificação do SERPRO.
Ocorre que resolveram mudar o servidor para Tomcat/Keytool (Jboss) e me incumbiram de fazer a migração deste certificado…
Eu tentei vários tutoriais da internet e não consegui.
Preciso com urgência fazer esta migração.
Agradeço desde já a colaboração.
Abs,

Silmar Antonio

4 Respostas

T

Provavelmente você vai ter de solicitar outro certificado, já que você está com pressa. (Já que foi emitido pelo Serpro deve ser mais barato :stuck_out_tongue: )

Por acaso você consegue converter o certificado original (que deve estar em formato PEM, não conheço direito como é que se trabalha com certificados no Apache) para o formato PKCS#12 (que possibilita sua importação pelo keytool?)
Talvez você precise de alguns comandos do tipo “openssl pkcs8” ou “openssl pkcs12”, mas não sei exatamente os detalhes.

O

thingol:
Provavelmente você vai ter de solicitar outro certificado, já que você está com pressa. (Já que foi emitido pelo Serpro deve ser mais barato :stuck_out_tongue: )

Por acaso você consegue converter o certificado original (que deve estar em formato PEM, não conheço direito como é que se trabalha com certificados no Apache) para o formato PKCS#12 (que possibilita sua importação pelo keytool?)
Talvez você precise de alguns comandos do tipo “openssl pkcs8” ou “openssl pkcs12”, mas não sei exatamente os detalhes.

Sem querer ser chato, mas já o sendo: o que é necessário migrar é a chave privada e não só o certificado. Pelo o que me lembro, OpenSSL armazena a chave privada + certificados em formato PKCS#12. Então é relativamente fácil migrar para uma keystore (que é formato que o Tomcat entende, que no fundo é um PBE). Para migrar eu fiz o seguinte programinha:

import java.io.*;
import java.security.*;
import java.security.interfaces.*;
import java.security.spec.*;
import java.security.cert.Certificate;
import java.util.*;


public class Import {

  public static void main(String[] args) throws Exception {
	Properties senhas = new Properties();
	Properties arquivos = new Properties();

	InputStream in = new FileInputStream("senhas.properties");
	senhas.load(in);
	in.close();

	in = new FileInputStream("arquivos.properties");
	arquivos.load(in);
	in.close();

	String passwd = senhas.getProperty("keyPasswd");
	String storePasswd = senhas.getProperty("storePasswd");
	String myalias = arquivos.getProperty("alias");
	String p12 = arquivos.getProperty("PKCS12File");
	String ks = arquivos.getProperty("KeyStoreFile");

	KeyStore pkcs12 = KeyStore.getInstance("PKCS12");
	pkcs12.load(new FileInputStream(p12), passwd.toCharArray());
	Key prk = pkcs12.getKey(myalias, passwd.toCharArray());
	Certificate[] cchain = pkcs12.getCertificateChain(myalias);

	KeyStore keystore = KeyStore.getInstance("JKS");
	keystore.load(null, storePasswd.toCharArray());
	keystore.setKeyEntry(myalias, prk, passwd.toCharArray(), cchain);
	keystore.store(new FileOutputStream(ks),storePasswd.toCharArray());

  }
}
T

Puxa, se o Apache trabalha com formato PKCS#12 já fica bem mais fácil. Pensava que ele trabalhasse com o formato PEM (que é um pouco desajeitado, e meio que específico para o OpenSSL; acho que esse formato é usado nos disquetes dos certificados digitais do Bradesco NetEmpresa.)

O

thingol:
Puxa, se o Apache trabalha com formato PKCS#12 já fica bem mais fácil. Pensava que ele trabalhasse com o formato PEM (que é um pouco desajeitado, e meio que específico para o OpenSSL; acho que esse formato é usado nos disquetes dos certificados digitais do Bradesco NetEmpresa.)

Realmente, o thingol está certo: lendo a documentação do mod_ssl, o arquivo de chaves está no formato PEM. Tem que usar o OpenSSL para converter para PKCS#12 para poder usar o meu programinha. Desculpe o fora… :oops:

Criado 16 de fevereiro de 2007
Ultima resposta 16 de fev. de 2007
Respostas 4
Participantes 3