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

Bouncycastle: X509CertificateHolder to X509Certificate?

В версиях до r146 можно было напрямую создавать объекты X509Certificate. Теперь, когда API устарел, а новый только предоставляет объект X509CertificateHolder.

Я не могу найти способ преобразования X509CertificateHolder в X509Certificate.

Как это можно сделать?

4b9b3361

Ответ 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());

........