web-dev-qa-db-fra.com

Obtention de la clé publique à partir du certificat

J'essaie d'obtenir la clé publique d'un certificat en utilisant la méthode:

FileInputStream fin = new FileInputStream("PathToCertificate");
CertificateFactory f = CertificateFactory.getInstance("X.509");
X509Certificate certificate = (X509Certificate)f.generateCertificate(fin);
PublicKey pk = certificate.getPublicKey();

mais je reçois l'erreur suivante:

Exception in thread "main" Java.lang.ClassCastException: Sun.security.x509.X509CertImpl cannot be cast to codec.x509.X509Certificate
        at sergas_testcertificates.Main.main(Main.Java:54)

Quelqu'un sait-il de quoi il s'agit?

Merci d'avance

25
javi

Vous avez importé la mauvaise classe pour X509Certificate.

Vous recherchez probablement Java.security.cert.X509Certificate ne pas codec.x509.X509Certificate.

19
Dan
X509Certificate certificate = (X509Certificate)f.generateCertificate(fin);
PublicKey pk = certificate.getPublicKey();

puisque vous ne retirez que la clé publique, vous pouvez utiliser la classe de certificat. La classe d'usine décidera du type de certificat à retourner.

Certificate certificate = f.generateCertificate(fin);
PublicKey pk = certificate.getPublicKey();

Si vous devez convertir cela pour une autre raison, vérifiez vos importations et modifiez-le, le certificat X509 devrait provenir de javax.security.cert

7
Sean