GARANTIR DESCONTO

Fórum Keytool - Problema ao importar certificado para o KeyStore #569064

09/04/2009

0

Pessoal, Na empresa onde trabalho utilizamos o httpclient para realizar algumas operações de monitoramento em páginas web. Nos casos onde a aplicação responde via https, precisamos importar (utilizando o Keytool) o certificado (arquivo .cer obtido clicando no cadeado do browser) ao KeyStore (arquivo cacerts), para que o httpclient consiga realizar as requisições. Na maioria do certificados funciona tudo bem. Mas tem alguns certificados que acontece de não conseguirmos importar, pois ocorre uma exceção. Vejam abaixo: Comando para importação do certificado:
/usr/lib/j2sdk1.5-sun/jre/bin/keytool -import -alias aliasdocertificado -file /tmp/arquivo.cer -keystore arquivocacerts -storepass senhadostore
Exceção:
keytool error: java.security.SignatureException: Signature does not match.
Gostaria de saber se alguém conhece uma solução para este problema... Obrigado, Jean Pierobom
Jean Pierobom

Jean Pierobom

Responder

Posts

09/04/2009

Paulo Jr

Olá, Tbm tive este problema com um servidor de homologação na empresa que trabalho, o certificado do servidor de produção importava sem problemas, mas o de homologação dava esse erro. No meu caso o problema estava no certificado, foi só gerar novamente o certificado para o servidor com o openssl e instalar no apache que deu certo a importação no cliente depois. Até. Paulo.
Responder

Gostei + 0

09/04/2009

Paulo Jr

Paulo, Mas me diz uma coisa... Você estava tentando importar o certificado de um servidor (o de produção) em outro servidor (o de homologação)? Pq no meu caso, o certificado foi gerado no próprio servidor (utilizando o openssl). Obrigado, Jean Pierobom
Responder

Gostei + 0

09/04/2009

Paulo Jr

Pessoal, Criei uma classe de teste. Ela carrega o certificado (arquivo .cer) e utiliza o método java.security.cert.Certificate.verify(PublicKey arg0) (que verifica se a assinatura foi feita utilizando a chave privada que corresponde à chave pública passada como parâmetro). CertificadoSSLLoader
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

import javax.security.cert.CertificateException;
import javax.security.cert.X509Certificate;

public class CertificadoSSLLoader {

	public static X509Certificate load(String cerFileName) throws CertificateException {
		File file = new File(cerFileName);
		FileInputStream fis;
		try {
			fis = new FileInputStream(file);
		} catch (FileNotFoundException e) {
			throw new IllegalArgumentException("Arquivo " + cerFileName + " não existe.");
		}
		X509Certificate certificado = X509Certificate.getInstance(fis);
		return certificado;
	}
}
TestaValidadeCertificadoSSL
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SignatureException;

import javax.security.cert.CertificateException;
import javax.security.cert.X509Certificate;

public class TestaValidadeCertificadoSSL {

	public static void main(String[] args) {
		try {
			X509Certificate certificado = CertificadoSSLLoader.load("certificado.cer");
				certificado.verify(certificado.getPublicKey());
		} catch (InvalidKeyException e) {
			System.out.println("Chave inválida.");
			e.printStackTrace();
		} catch (NoSuchAlgorithmException e) {
			System.out.println("Algoritmo inválido.");
			e.printStackTrace();
		} catch (NoSuchProviderException e) {
			System.out.println("Provedor inválido.");
			e.printStackTrace();
		} catch (SignatureException e) {
			System.out.println("Assinatura inválida.");
			e.printStackTrace();
		} catch (CertificateException e) {
			System.out.println("Ocorreu um erro ao carregar o certificado");
			e.printStackTrace();
		}
	}
}
A saída deste programa, como esperado, é a mesma do keytool:
Assinatura inválida.
java.security.SignatureException: Signature does not match.
	at sun.security.x509.X509CertImpl.verify(Unknown Source)
	at sun.security.x509.X509CertImpl.verify(Unknown Source)
	at com.sun.security.cert.internal.x509.X509V1CertImpl.verify(Unknown Source)
	at TestaValidadeCertificadoSSL.main(TestaValidadeCertificadoSSL.java:16)
O que mais me chamou atenção até aqui foi o comentário javadoc do método.
abstract void verify(PublicKey key)  
    Verifies that this certificate was signed using the private key that corresponds to the specified public key. 
Isto me leva a crer que que há grandes chances de ser algum problema ocorrido no momento da geração do certificado no servidor do site. Clareou para alguém? Obrigado, Jean Pierobom
Responder

Gostei + 0

09/04/2009

Paulo Jr

Pessoal, O certificado foi gerado novamente e a importação foi realizada com sucesso. Obrigado à todos, em especial ao Paulo que me ligou (grande coincidência pois trabalhamos na mesma empresa e eu não sabia!) e passou o caminho das pedras. Obrigado, Jean Pierobom
Responder

Gostei + 0

12/08/2009

Wellington Carvalho

OLá.. tb estou gerando certificado com openssl, e estou tendo problemas... da um erro : javax.security.cert.CertificateException: Could not parse certificate: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big. vc ja viu isso ? to bem enrolado ... ja tentei gerar o certificado novamente mas num tive sucesso... usei este tutorial.. http://suporte.softwell.com.br/maker/manual/dicas_e_truques/certificacao_digital_ambiente_webrun.htm c puder me ajudar agradesco.. vc ja viu este erro antes, como corrigiu ?
Responder

Gostei + 0

14/08/2009

Wellington Carvalho

Tom, desculpe mas vou ficar devendo... Até pesquisei por algo mas não encontrei nada. Acredito que seja algum problema relacionado à geração do certificado mesmo. Até mais,
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar