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 № 1Você 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