/ / Obtenção de chave pública de certificado - java, criptografia

Obtendo chave pública do certificado - java, criptografia

Estou tentando obter a chave pública de um certificado usando o método:

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

mas eu recebo o seguinte erro:

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)

Alguém sabe sobre o que é esse erro?

desde já, obrigado

Respostas:

17 para resposta № 1

Você tem a classe errada importada para X509Certificate.

Você provavelmente está procurando java.security.cert.X509Certificate não codec.x509.X509Certificate.


7 para resposta № 2
X509Certificate certificate = (X509Certificate)f.generateCertificate(fin);
PublicKey pk = certificate.getPublicKey();

como você está apenas puxando a chave pública, pode usar a classe de certificado. A classe de fábrica decidirá que tipo de certificado devolver.

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

Se você precisar converter isso por outro motivo, verifique suas importações e altere-o, o X509Certificate deve ser proveniente de javax.security.cert