Migração de certificado digital

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

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.

[quote=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.
[/quote]

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());

  }
}

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.)

[quote=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.)
[/quote]

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: