Bouncycastle: X509CertificateHolder to X509Certificate?
В версиях до r146 можно было напрямую создавать объекты X509Certificate
.
Теперь, когда API устарел, а новый только предоставляет объект X509CertificateHolder
.
Я не могу найти способ преобразования X509CertificateHolder
в X509Certificate
.
Как это можно сделать?
Ответы
Ответ 1
Я отвечу на свои вопросы, но не удаляю его, если у кого-то другие проблемы будут такими же:
return new JcaX509CertificateConverter().setProvider( "BC" )
.getCertificate( certificateHolder );
И для сертификатов атрибутов:
return new X509V2AttributeCertificate( attributeCertificateHolder.getEncoded() );
Не нравится, поскольку это кодирование и декодирование, но оно работает.
Ответ 2
Другой вариант: 1)
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
InputStream in = new ByteArrayInputStream(certificateHolder.getEncoded());
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(in);
Ответ 3
Это возможность получить X509CertificateHolder
до X509Certificate
и toString
. (первое предложение кода не имеет значения)
X509CertificateHolder selfSignedCertificate = CertificateUtils.selfSignCertificate(certificationRequest, keyPair.getPrivate());
byte[] content = selfSignedCertificate.getEncoded();
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) certificateFactory.generateCertificate(new ByteArrayInputStream(content));
logger.debug("cert: {}", cert.toString());
........