Подтвердить что ты не робот

Получение открытого ключа из сертификата

Я пытаюсь получить открытый ключ сертификата с помощью метода:

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

но я получаю следующую ошибку:

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)

Кто-нибудь знает, что это за ошибка?

Заранее спасибо

4b9b3361

Ответ 1

У вас есть неправильный класс, импортированный для X509Certificate.

Вероятно вы ищете java.security.cert.X509Certificate not codec.x509.X509Certificate.

Ответ 2

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

поскольку вы только вытаскиваете открытый ключ, вы можете использовать класс сертификата. Класс factory определит тип возвращаемого сертификата.

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

Если вам нужно отдать это по причине antoher, проверьте импорт и измените его, X509Certificate должен поступать из javax.security.cert