La clé publique de vérification renvoie toujours “la Signature ne correspond pas”

Je suis en train de vérifier la clé publique d'un certificat. Le certificat a été importés dans un fichier de clés à l'aide de cette commande:

keytool -importcert -file cert.cer -keystore kstore.jks -alias mycert -storepass changeit

C'est le code java-je utiliser pour vérifier la clé publique:

File keyStore = new File("kstore.jks");
String keyStorePassword = "changeit";
KeyStore ks = null;
try {
   ks = KeyStore.getInstance("jks");
   ks.load(keyStore.toURI().toURL().openStream(), keyStorePassword.toCharArray());
} catch (Exception e) {
   e.printStackTrace();
} 

try {
   Certificate cert = ks.getCertificate("mycert");
   PublicKey pk = cert.getPublicKey();
   cert.verify(pk);
   //cert.verify(pk, "SunRsaSign");
   System.out.println("Keys verified");
} catch (Exception e) {
   e.printStackTrace();
}

L'exception que je reçois est:

java.security.SignatureException: Signature does not match.
   at sun.security.x509.X509CertImpl.verify(X509CertImpl.java:446)
   at sun.security.x509.X509CertImpl.verify(X509CertImpl.java:389)
   at VerifyEBXMLSignature.runIt3(VerifyEBXMLSignature.java:62)
   at VerifyEBXMLSignature.main(VerifyEBXMLSignature.java:41)

Le certificat contient une clé publique et je n'ai pas accès à la clé privée.
Est-il possible de vérifier que la clé publique à l'encontre de ce certificat que j'ai importer dans un fichier de clés? La clé publique de vient de le certificat lui-même, de sorte qu'il devrait être correct.

Plus ce que je dois chercher avec le certificat?

J'avais un peu plus d'iformation sur le certificat: Il est exporté à partir de la clé privée. Il n'y a rien dans ce processus qui peut être fait de mal?

Êtes-vous à l'aide de certificats auto-signés?
Je crois que l'original du certificat est auto-signé. Howver, le certificat de clé publique (que j'utilise) a été exporté à partir de l'original.
Posté le code ne fonctionne que si le certificat référencé par "mycert" est un certificat auto-signé.
Est-ce à dire que la vérification de la clé publique (comme dans: cert.vérifier(pk);) ne peut pas être fait sur un certificat de clé publique?

OriginalL'auteur Java_bear | 2012-08-28