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?
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
Vous devez vous connecter pour publier un commentaire.
Vous ne devriez pas être en train de passer de la clé publique que vous avez extrait à partir du certificat. Vous devriez être en train de passer de la clé publique de l'émetteur du certificat de vérifier la signature.
Donc, comme Robert l'a souligné dans les commentaires, votre code ci-dessus ne fonctionne que si c'est un certificat auto-signé (le certificat est signé avec lui-même).
Merci pour vos commentaires.
OriginalL'auteur Marcus Adams
La clé publique de vérifier méthode utilise en interne
X509
Certificat de mise en œuvre.De sorte qu'il ne peut vérifier ces certificats qui sont générés par
X509
normes.Pour plus d'informations, Visitez http://en.wikipedia.org/wiki/X.509
OriginalL'auteur Harbeer Kadian